小杨定义了结构体数组,并使用指针访问其中的元素。执行下面代码后输出的是( )。
struct Book {
string name;
int pages;
};
int main() {
Book books[2] = {{"C++", 120}, {"Math", 150}};
Book *p = books + 1;
p->pages += 10;
cout << books[1].name << " " << books[1].pages;
return 0;
}看到结构体数组和指针,先定位指针指向哪个元素,再看修改操作影响哪个成员,最后确认输出的是哪个元素的哪个成员。
混淆指针与下标、误以为修改指针指向的元素会影响原数组、看错输出项。
本题落在《GESP 考试大纲》四级"指针与数组"模块,核心是结构体数组与指针运算。命题人卡住的是多数考生对"指针与下标等价性"的模糊认识——以为 p 指向某元素后,books[1] 就与 p 无关,从而误判修改作用域。
先初始化:books[0] 为 {"C++",120},books[1] 为 {"Math",150}。指针 p = books + 1 指向数组第二个元素,即 books[1]。执行 p->pages += 10 等价于 books[1].pages += 10,原值 150 变为 160。最后输出 books[1].name 与 books[1].pages,即 "Math" 与 160,组合为 Math 160,对应选项 C。
通法:遇到结构体数组 + 指针,先确认指针偏移量对应哪个下标,再判断成员修改是否影响原数组,最后核对输出项是否来自同一元素。