int arr[4][2][3][6];
ARRのタイプ(配列名)私の知る限りではタイプ
(gdb) wha arr
type = int [4][2][3][6]
を検査するGDBを実行して、式(exept内のオペランドとして使用される場合'sizeof'または '&')、コンパイラは配列名を配列の最初の要素へのポインタとして扱います。
(gdb) wha arr+1
type = int (*)[2][3][6]
あなたが期待通りに出力されていることを確認:だから、私は私がこれを検査した場合、興味深いことに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]
、&arr
では、ARRがint [4][2][3][6]
あるべきint [4][2][3][6]
へのポインタです....
あなたは何を求めていますか?配列の型はその型であり、型が崩壊する型ではありません。これは '&'演算子、 'sizeof'演算子、GCC拡張子' __typeof__'でCでも見ることができます。 –
あなたの応答を考えた後、私はgdbに配列名の型を教えてもらうために、配列名自体が '式'にないことを知った!したがって、最初の要素へのポインタとして扱われません。 –
ところで、+0ではなく+0を使用して値を変更せずに減衰させることができます。 –