在64位操作系统下(LP64 / LLP64 模型),下面代码的输出结果是()。 #include 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; }
A:16 8 8 8 1 1
B:16 8 16 8 1 1
C:16 8 8 4 4 1
D:16 8 8 8 4 1
正确答案:A
答案解析
首先确定各数据类型的大小:int类型在64位系统下占4字节;数组a有4个int元素,故整个数组占用16字节。p是指向长度为4的int数组的指针,其本身为指针,在64位系统下占8字节。q是int指针,同样占8字节。&a表示整个数组的地址,其类型为int(*)[4],与p一致。计算sizeof(a)时,返回整个数组占用的字节数。计算sizeof(p)、sizeof(q)时,返回指针本身的大小。对p和q进行解引用操作后,分别得到数组首地址对应的值或首个元素的值。通过逐项分析每个表达式的类型和内存布局,可推导出各输出项的具体数值。
试卷来源:202603 CCF-GESP编程能力等级认证C++八级真题