为什么此时是将m得地址赋值给*p 也就是指针变量p所指向的位置而不是p本身呀
![](https://profile-avatar.csdnimg.cn/adecc684d81b480bb3091c909cb9625f_ice_lemon_litchi.jpg!4)
为什么此时是将m得地址赋值给*p 也就是指针变量p所指向的位置而不是p本身呀
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注
引自免费微信小程序:皆我百晓生
在C语言中,指针是一种特殊的变量,它存储的是其他变量的内存地址。当你声明一个指针变量时,比如
int *p;
,你创建了一个可以存储整型变量地址的空间。然而,这个指针变量本身并没有自动初始化为任何特定的地址。当你说“将m的地址赋给*p”,实际上是在说把整数变量
m
的内存地址赋值给指针变量p
所指向的地方(即*p
)。这是通过解引用操作符*
实现的,*p
表示指针p
所指向的内存位置。所以当你写*p = &m;
时,你实际上是将m
的地址存入了p
所指向的那个内存位置,使得指针p
现在能通过这个地址找到变量m
。如果你想要将
m
的地址赋给指针变量p
本身,你应该直接写p = &m;
。这样,p
就存储了m
的地址,而不是某个其他位置的地址。初始版本中的代码之所以说是错误的,是因为在执行*p = &m;
之前,指针p
没有被正确初始化,它可能含有垃圾值,这时尝试通过p
去访问内存可能会导致未定义的行为,包括数据损坏、程序崩溃或者产生不可预测的结果。下面是修正后的代码示例:
#include <stdio.h> int main() { int m = 1; int *p; // 正确的做法:先初始化指针,然后赋值 p = &m; printf("Value of m: %d\n", m); printf("Address of m: %p\n", &m); printf("Value at the address pointed by p: %d\n", *p); return 0; }
在这个例子中,我们首先初始化指针
p
使其指向m
的地址,然后输出m
的值、m
的地址以及通过p
访问到的值,可以看到它们是一致的。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥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仿真