C语言:指针变量p、*p、&a之间的关系
举个例子:
int a =10;
int* p = &a;//这里解地址a的意思是获取a的内存地址,所以指针变量p存放的是a的内存地址,打印的时候用%p
单步执行时候,内存中a的值内存:
这里p存放的a的内存地址
那么p的值保存的是a的内存地址,通过&a方式获取
那么*p又是什么呢?
测试一下打印下*p,打印下来是a的值
这说明*p保存的是a保存的值,更合理的说法是:
p指针指向a内存的值是*p表示,*p获取了a的值,只不过是通过a的内存地址获取的
这里需要注意的是这里打印的是%d,如果打印%p呢?
这里获取了*p的内存地址(这种用法有问题,正常来讲*p仅仅是用来获取值)
那么打印&p呢?猜测&a是获取a的内存地址,那么&p就是获取p指针变量的内存地址,这里要说明的是因为p在内存中的位置不固定,所以通过调试查看&p保存的内容:
这里保存了p的内存地址:
总结下就是:
*是获取值,&是获取地址

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步