在 $64$ 位操作系统下(LP64 / LLP64 模型),下面代码的输出结果是( )。
#include <iostream>
using namespace std;
int main() {
int a[4] = {1, 2, 3, 4};
int (*p)[4] = &a;
int *q = a;
cout << sizeof(a) << " ";
cout << sizeof(p) << " ";
cout << sizeof(p + 1) << " ";
cout << sizeof(q + 1) << " ";
cout << (p + 1) - p << " ";
cout << (q + 1) - q << endl;
}模拟程序执行过程,逐行跟踪变量变化,特别关注循环边界和递归终止条件。
模拟执行时注意:① 循环变量的起始和终止值;② 递归的边界条件;③ 数据类型转换和精度问题。
【考点】内存布局|指针类型与运算|sizeof 语义
GESP 八级 C++ 大纲「指针与内存」模块。命题人卡住的就是 90% 考生「sizeof 看类型不看值」的固有误区——看到 p+1 下意识想成「数组大小 16」,而不是「指针类型不变」;p- 与 q- 的减法又混成字节差,其实取的是元素个数差。