int *p,a=3;
p=&a;
为什么这里p就是等于a的值了?&不是取址符吗,p不应该等于类似0X021的这种地址吗
![](https://profile-avatar.csdnimg.cn/adecc684d81b480bb3091c909cb9625f_ice_lemon_litchi.jpg!4)
p=&a; 为什么这里p就是等于a的值了?&不是取址符吗
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注
引自免费微信小程序:皆我百晓生
在C语言中,
&
操作符确实表示取地址运算符,而*
则用于解引用(获取指针所指向的变量的值)。在这个例子中,int *p, a = 3; p = &a;
声明了一个整型指针变量
p
和一个整型变量a
,并给a
赋值为3。接着,我们使用&
运算符获取a
的内存地址,并将这个地址赋值给p
。所以,当执行
p = &a;
这行代码时,p
并没有等于a
的值(在这里是3),而是等于a
在内存中的地址。这个地址是一个内存位置,它告诉程序如何找到变量a
的存储空间。在不同的编译器和系统上,这个地址可能会不同,比如你提到的"类似0X021的这种地址",实际上可能看起来更像"0x7fff5fbff8e4"这样的十六进制数字。如果你想打印出
p
和a
的值以及它们的地址,可以使用下面的代码:#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 *
类型。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥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仿真