0
int arr[4][2][3][6];

gdb を実行して arr (配列名) のタイプを検査する場合

(gdb) wha arr
type = int [4][2][3][6]

私の知る限り、式(「sizeof」または「&」のオペランドとして使用される場合を除く)では、コンパイラは配列名を配列の最初の要素へのポインターとして扱います。だから、私は期待していたtype = int (*)[2][3][6]

興味深いことに、これを調べると:

(gdb) wha arr+1
type = int (*)[2][3][6]

出力が期待どおりであることがわかります。ここで知りたいのは、それが gdb の表示スタイルなのか、それとも配列名の型が本当にint [4][2][3][6]?

ところで、gdb がタイプがint [4][2][3][6]であると言った理由は推測できます。

(gdb) wha &arr
type = int (*)[4][2][3][6]

つまり、is&arrはポインタでありint [4][2][3][6]、arr はint [4][2][3][6]....である必要があります。

4

1 に答える 1

3

コンパイラは、ポインターを予期するコンテキストで使用する場合、名前を最初の要素へのポインターとして使用します。しかし、gdb は、渡すシンボルの実際の型について正しいです。

arr+1 は &arr[1] で、表示されている 3 次元配列へのポインターです。

arr 自体はそれらの配列です。つまり、4 次元配列です。

于 2012-05-01T03:26:28.757 に答える