已知 int a[6] = {1, 3, 5, 7, 9, 11}; int *p = a + 1; ,则表达式 *(p + 3) 的值是( )。
看到题先定位 p 指向哪里。p = a + 1 说明 p 指向数组第二个元素 a[1](值为 3)。指针加 3 是地址偏移,p + 3 指向 a[1 + 3] = a[4],再解引用就是 a[4] 的值。这类题通法:先确定指针初始位置,再按偏移量计算目标下标,最后查表取值。
选项 B 7 是 a[3],对应 p + 2 的结果,容易把 p 当成 a 本身;选项 A 5 是 a[2],对应 p + 1;选项 D 11 是 a[5],对应 p + 4。最阴险的是 p 已经偏移了 1,很多考生会忽略这个初始偏移,直接按 p + 3 当成 a[3] 去取值。
本题考查 GESP 七级《C++ 程序设计》模块 3 中的指针运算与数组与指针知识点。命题人放这道题,就是卡住大量考生对"指针初始位置"的敏感度——他们习惯把指针当成数组名用,却忘了指针本身可能已经偏移。
看到题先定位 p 指向哪里。p = a + 1 说明 p 指向数组第二个元素 a[1](值为 3)。指针加 3 是地址偏移,p + 3 指向 a[1 + 3] = a[4],再解引用就是 a[4] 的值。这类题通法:先确定指针初始位置,再按偏移量计算目标下标,最后查表取值。