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的内存地址:

 

总结下就是:

*是获取值,&是获取地址

 

 


 

posted @ 2022-05-06 20:04  逆向菜狗  阅读(847)  评论(0编辑  收藏  举报