C语言中为何指针变量自身地址与它指向的变量地址不同?
为什么指针变量自身的地址和它指向的变量地址不同?
- 指针变量
ptr本身就是一个独立的变量,它和x一样需要占用内存空间来存储数据:x存的是整数20,ptr存的是x的内存地址。 &x获取的是变量x在内存中的存储位置,&ptr获取的是指针ptr自己的存储位置,这是两个完全不同的内存单元,所以地址肯定不一样。
看你提供的代码:
#include <stdio.h> int main() { int *ptr; int x = 20; ptr = &x; printf("address of x = %p\n", &x); printf("address of ptr = %p\n", &ptr); }
对应的输出:
address of x = 0x7ffe31da2274 address of ptr = 0x7ffe31da2278
这里ptr内部存储的值其实就是0x7ffe31da2274(也就是x的地址),但ptr自己在内存里的位置是0x7ffe31da2278——这是两回事。如果要验证这点,你可以加一行代码打印ptr存储的内容:
printf("value stored in ptr = %p\n", ptr);
这时候输出就会和&x完全一致。
内容的提问来源于stack exchange,提问作者emirhan
相关产品推荐
相关产品推荐

