执行下述代码后,变量 a 的值为( )。
int a = 10;
int* p = &a;
*p = 20;答案B。指针变量存储的是内存地址。定义指针时必须指定指向的类型(如int*指向int)。nullptr表示空指针。
指针必须先初始化再使用。nullptr是空指针常量,不指向任何有效内存。解引用空指针导致崩溃。
【考点】指针基础|解引用操作|地址传递
1. 🎯 考纲定位 本题考查《GESP 大纲》中级阶段"指针基础"模块,命题人专卡考生对"指针与变量关系"的模糊认知。四级阶段强调指针是"地址容器"而非"变量本身",这道题就是检验你是否真正理解*p等价于a。
2. 🧠 解题思维 看到int a = 10;先明确 a 的内存地址已分配;int* p = &a;让 p 存储 a 的地址;*p = 20;解引用即直接修改 a 的值。核心观察:指针只是地址的别名,通过它操作就是操作原变量。通法:任何*ptr = x都等价于原变量 = x,与指针名无关。
3. 🪤 陷阱拆解 A 选项(10)是误以为*p只读不改,混淆了赋值与取值;C 选项(随机值)源于对野指针的过度联想,但此处 p 合法指向 a;D 选项(编译错误)完全脱离语法事实——指针声明与赋值均合规。命题人利用"指针神秘感"制造选择干扰,若只背结论不追本质,必选错。
4. 🔄 反命题思维 若把*p = 20;改为*p = *p + 5;,答案会变为 25;若定义int b = *p;再问 b 的值,则是 20。刷题时先自问:这题想考指针的哪一层本质?是地址传递、解引用、还是别名关系?