为何变量j的值为11?请解析这段C++代码的执行逻辑
解析你的C++代码为何输出j=11
我来帮你一步步拆解这段代码的执行过程,就能明白为什么j的最终值是11了:
首先先把你的代码贴出来方便对照:
#include <iostream> using namespace std; int main() { int i = 10, j = 20, k; int* p = &i; int* q = &j; *p += 1; p = &k; *p = *q; p = q; *p = i; cout << j << endl; return 0; }
接下来逐行跟踪变量和指针的变化:
初始化阶段:
int i = 10, j = 20, k;:i被赋值为10,j为20,k暂未初始化(后续会被赋值,不影响结果)int* p = &i;:指针p指向i的内存地址,此时*p等价于iint* q = &j;:指针q指向j的内存地址,此时*q等价于j
执行
*p += 1;:
因为p指向i,所以这行代码等价于i += 1,i的值从10变为11执行
p = &k;:
指针p的指向改为k的内存地址,和i彻底解绑执行
*p = *q;:*q对应j的值(20),*p对应k,所以这行是把k赋值为20,j的数值保持20不变执行
p = q;:
指针p现在和q指向同一个地址——j的内存地址,此时*p等价于j执行
*p = i;:
这里*p就是j,而i当前的值是11,所以这行等价于j = i,j的数值被修改为11
最后cout << j << endl;自然就输出11了。你之前预期其他数值,大概率是没注意到最后一步p = q后,*p就代表j了,随后把已经变成11的i值赋给了j,这才是改变j最终结果的关键步骤~
内容的提问来源于stack exchange,提问作者Asker
相关产品推荐
相关产品推荐

