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 回答