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的内存地址:
总结下就是:
*是获取值,&是获取地址
![](https://img2022.cnblogs.com/blog/2038659/202205/2038659-20220506200316366-1259756466.png)