为何修改指针解引用值会导致原始变量value的值发生变化?
为什么修改
*ptr会改变value的值? 先看你提供的示例代码:
short value=7; short *ptr=&value; std::cout<<&value<<'\n'; std::cout<<value<<'\n'; std::cout<<ptr<<'\n'; std::cout<<*ptr<<'\n'; std::cout<<'\n'; *ptr=9; std::cout<<&value<<'\n'; std::cout<<value<<'\n'; std::cout<<ptr<<'\n'; std::cout<<*ptr<<'\n'; std::cout<<'\n';
这事儿得从指针的本质说起——指针变量ptr存储的不是普通数值,而是另一个变量的内存地址。
看你代码里的关键行:short *ptr=&value;,这里的&value是取value的内存地址(就像给变量value的"家"门牌号),然后把这个门牌号赋值给ptr。现在ptr就相当于一个指向value家的"导航坐标"。
那*ptr又是什么?*在这里是解引用运算符,它的作用就是顺着ptr里存的门牌号,找到对应的那间"房子"(内存空间),然后直接操作里面的东西。
当你写*ptr=9;的时候,你其实是在说:"跟着ptr的导航找到对应的内存空间,把里面的值改成9"。而这个内存空间,正好就是value变量占用的那块!所以value的值自然就跟着变成9了。
打个生活化的比方:
value是你放在储物柜里的背包,里面装着数字7ptr是写着这个储物柜编号的纸条*ptr就是拿着纸条找到储物柜,打开它直接修改里面的东西
你把储物柜里的背包换成装着9的,那再看value(储物柜里的背包),内容当然变了~
内容的提问来源于stack exchange,提问作者Thong Nguyen Thanh
相关产品推荐
相关产品推荐

