C++输出指针p时为何得到内存地址而非指向的实际值?
C++指针打印输出地址而非指向值的原因解析
首先明确核心规则:C++中指针变量的本质是存储内存地址的特殊变量,对指针做解引用操作只会访问/修改它指向的内存空间的内容,不会改变指针变量本身存储的地址值。
先逐行拆解示例代码逻辑:
int x = 2; int y = 8; int* p = &x; *p = y; cout << p << endl;
- 第1、2行:分别在栈区开辟两块int长度的内存空间,分别存入值2、8,绑定变量名x、y
- 第3行:定义int类型指针p,将变量x的内存地址存入p变量自身的存储空间,此时p指向x对应的内存
- 第4行:
*p = y中的*是解引用运算符,这行代码的逻辑是:找到p中存储的地址对应的内存空间(也就是x的内存),将y的值8写入这块空间。执行完这行后,x原本存储的2会被覆盖为8,但p自身存储的地址值没有任何变化,它仍然指向x对应的内存位置。
cout的输出逻辑完全由传入的参数决定:
- 传入
p时,输出的是p变量本身存储的内容,也就是它保存的内存地址,自然会打印十六进制格式的地址值 - 如果需要输出指针指向的实际数值,必须传入解引用后的结果,也就是将打印语句改为
cout << *p << endl;,此时程序才会读取p存储的地址对应内存中的int值8完成输出。
补充一个容易混淆的点:只有直接给指针变量本身赋值(比如写p = &y;)时,才会修改p存储的地址,让它指向其他内存位置;解引用操作是操作指向的目标内存,不会改动指针本身存储的内容。
内容的提问来源于stack exchange,提问作者Cyreex
相关产品推荐
相关产品推荐

