AC / C ++指针拼图?
假设我们有一个整数变量,其大小为4个字节,那里还有另一个指针变量,其大小为8个字节。那么以下内容的输出是什么?
示例
#include<iostream> using namespace std; main() { int a[4][5][6]; int x = 0; int* a1 = &x; int** a2 = &a1; int*** a3 = &a2; cout << sizeof(a) << " " << sizeof(a1) << " " << sizeof(a2) << " " << sizeof(a3) << endl; cout << (char*)(&a1 + 1) - (char*)&a1 << " "; cout << (char*)(&a2 + 1) - (char*)&a2 << " "; cout << (char*)(&a3 + 1) - (char*)&a3 << " "; cout << (char*)(&a + 1) - (char*)&a << endl; cout << (char*)(a1 + 1) - (char*)a1 << " "; cout << (char*)(a2 + 1) - (char*)a2 << " "; cout << (char*)(a3 + 1) - (char*)a3 << " "; cout << (char*)(a + 1) - (char*)a << endl; cout << (char*)(&a[0][0][0] + 1) - (char*)&a[0][0][0] << " "; cout << (char*)(&a[0][0] + 1) - (char*)&a[0][0] << " "; cout << (char*)(&a[0] + 1) - (char*)&a[0] << " "; cout << (char*)(&a + 1) - (char*)&a << endl; cout << (a[0][0][0] + 1) - a[0][0][0] << " "; cout << (char*)(a[0][0] + 1) - (char*)a[0][0] << " "; cout << (char*)(a[0] + 1) - (char*)a[0] << " "; cout << (char*)(a + 1) - (char*)a; }
为了解决这个问题,我们可以遵循下面的一些要点-
整数大小为4字节(32位),指针大小为8字节。如果我们将1加指针,它将指向下一个立即类型。
&a1是int**类型,&a2是int***类型,而&a3是int****类型。这里所有的都指向指针。如果加1,我们将加8字节。
a[0][0][0]是整数,&a[0][0][0]是int*,a[0][0]是int*,&a[0][0]是int类型(*)[6]等。因此&a的类型为int(*)[4][5][6]。
输出结果
480 8 8 8 8 8 8 480 4 8 8 120 4 24 120 480 1 4 24 120