Leo*_*sky 16 c multidimensional-array
我知道这个例子:
void foo(int a[])// or a[x]
Run Code Online (Sandbox Code Playgroud)
将由编译器考虑如下:
void foo(int *a)
Run Code Online (Sandbox Code Playgroud)
但我不知道,我没有发现编译器看到的多维数组是怎样的
例如:
void foo(int a[3][4])
Run Code Online (Sandbox Code Playgroud)
它会是这样的吗?
void foo(int (*a)[4])
Run Code Online (Sandbox Code Playgroud)
或者类似的东西?
void foo(int **a)
Run Code Online (Sandbox Code Playgroud)
dbu*_*ush 22
当数组衰减时,它会转换为指向第一个元素的指针.在的情况下int a[3][4],a是一个数组int[4],所以指向int [3][4]has类型的元素的指针int (*)[4].
所以这:
void foo(int a[3][4])
Run Code Online (Sandbox Code Playgroud)
是相同的:
void foo(int (*a)[4])
Run Code Online (Sandbox Code Playgroud)
在不知道除最外层之外的每个维度的情况下,编译器不能索引传递给函数的多维数组.
因此,对于1D阵列,不需要长度:
void foo(int a[]);
Run Code Online (Sandbox Code Playgroud)
和
void foo(int a[3]);
Run Code Online (Sandbox Code Playgroud)
尽管有误导性,但它们是相同的,因为C不关注数组的长度:这是程序员正确的.
对于一个二维数组的内部尺寸也必须是正确的,或者编译器将不知道如何建立索引.所以
void foo(int a[][3]);
Run Code Online (Sandbox Code Playgroud)
很好,但是
void foo(int a[][]);
Run Code Online (Sandbox Code Playgroud)
无法编码,和
void foo(int a[42][3]);
Run Code Online (Sandbox Code Playgroud)
是好的,但不必要,而不是限制,因为所有编译器需要的是有关如何索引的信息,而不是多少.
| 归档时间: |
|
| 查看次数: |
824 次 |
| 最近记录: |