如何获取变量内存地址及指针指向的值并打印?是否用解引用运算符?
关于C语言指针的地址与取值问题解答
没问题,我来一步步帮你理清这个指针操作的细节~
先看你给出的代码:
int myInt = 15; int *myPointer; myPointer = &myInt;
1. 获取myInt的内存地址
有两种直接的方式:
- 直接使用取地址运算符
&:&myInt就是myInt变量在内存中的地址。打印时要注意用%p格式符,并且把地址转换为void*类型(这是标准做法,避免编译器警告):printf("myInt的内存地址:%p\n", (void*)&myInt); - 利用已经赋值的指针变量
myPointer:因为myPointer = &myInt已经把myInt的地址存到了指针里,所以直接打印myPointer就能得到同样的地址:printf("myInt的内存地址(通过指针获取):%p\n", (void*)myPointer);
2. 获取myPointer指向的值
这里必须使用解引用运算符*!指针变量myPointer存储的是内存地址,要访问这个地址对应的实际值,就得用*来“解引用”它。*myPointer等价于直接访问myInt,所以可以这样打印:
printf("myPointer指向的值:%d\n", *myPointer);
运行后会输出15,和myInt的值完全一致。
总结一下:
- 获取变量的内存地址:用
&变量名,或者直接使用指向该变量的指针变量(因为指针本身存的就是地址),不需要解引用。 - 获取指针指向的值:必须使用解引用运算符
*指针变量,这样才能从地址跳转到对应的值。
给你一个完整的可运行示例代码:
#include <stdio.h> int main() { int myInt = 15; int *myPointer; myPointer = &myInt; // 打印myInt的内存地址 printf("myInt的内存地址:%p\n", (void*)&myInt); printf("通过myPointer获取的myInt地址:%p\n", (void*)myPointer); // 打印指针指向的值 printf("myPointer指向的值:%d\n", *myPointer); printf("直接访问myInt的值:%d\n", myInt); return 0; }
内容的提问来源于stack exchange,提问作者Tae
相关产品推荐
相关产品推荐

