不需要睡觉o 2024-05-21 20:10 采纳率: 94.7%
浏览 1
已结题

p=&a; 为什么这里p就是等于a的值了?&不是取址符吗

int *p,a=3;
p=&a;
为什么这里p就是等于a的值了?&不是取址符吗,p不应该等于类似0X021的这种地址吗

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-21 20:10
    关注

    引自免费微信小程序:皆我百晓生

    在C语言中,&操作符确实表示取地址运算符,而*则用于解引用(获取指针所指向的变量的值)。在这个例子中,

    int *p, a = 3;
    p = &a;
    

    声明了一个整型指针变量p和一个整型变量a,并给a赋值为3。接着,我们使用&运算符获取a的内存地址,并将这个地址赋值给p

    所以,当执行p = &a;这行代码时,p并没有等于a的值(在这里是3),而是等于a在内存中的地址。这个地址是一个内存位置,它告诉程序如何找到变量a的存储空间。在不同的编译器和系统上,这个地址可能会不同,比如你提到的"类似0X021的这种地址",实际上可能看起来更像"0x7fff5fbff8e4"这样的十六进制数字。

    如果你想打印出pa的值以及它们的地址,可以使用下面的代码:

    #include <stdio.h>
    
    int main() {
        int a = 3;
        int *p = &a;
    
        printf("Value of a: %d\n", a);
        printf("Address of a: %p\n", (void *)&a);
        printf("Value stored in p: %d\n", *p);
        printf("Address stored in p: %p\n", (void *)p);
    
        return 0;
    }
    

    这段代码会分别输出a的值、a的地址、通过p获取到的a的值(即a的值)以及p自身的地址。注意,为了安全地比较两个地址,我们需要将它们转换成void *类型的指针,因为%p格式化字符要求其参数是void *类型。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月29日
  • 已采纳回答 5月21日
  • 创建了问题 5月21日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真