运行下面程序后变量 a 的值是( )。
int a = 42;
int* p = &a;
*p = *p + 1;答案B。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。
指针和数组追踪时画内存布局图可以大大简化理解。
【考点】指针与内存地址|解引用与赋值|C++变量作用域
🎯考纲定位:GESP四级"C++基础语法”模块,命题人专盯"指针即地址"的抽象难点,90%考生死在"指针不直接等于值"的盲区。
🧠解题思维:先求值再写回——*p等价于a,*p+1即a+1,赋值给*p等于a=a+1,a由42变43。通法是"解引用=取内容,赋给*指针=改内容",别把指针当成普通变量。
🪤陷阱拆解:A错在把*p当独立变量(指针不直接等于值);C错在以为指针操作有副作用(C++无编译错误);D错在把指针当容器(指针地址固定)。最阴险的是"*p=*p+1"看似绕弯,实则就是"a=a+1"。
🔄反命题思维:若把*p=*p+1改成*p=5,a直接变5;若改为int*p=nullptr; *p=*p+1; 则程序崩溃。刷到指针题先问"这行到底在改谁的内容"。