サイズが 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 *、[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
以上がC/C++ ポインター パズルですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。