5
A
回答
1
你會得到一個診斷。
int [x][]
是一個不完整的數組類型,無法完成。
3
你會得到一個編譯錯誤。對於多維數組,最多可以省略第一維。因此,例如,int array[][x]
應該是有效的。
8
讓我們假設你有地方:
#define x 3
正如其他人所指出的,typedef int array [3][];
將無法編譯。您只能省略數組長度的最重要(即第一個)元素。
但是你可以說:
typedef int array [][3];
這意味着array
是(AS-又未指定長度的)長度3個陣列的int數組。
要使用它,您需要指定長度。您可以通過使用像這樣的初始化器做到這一點:
array A = {{1,2,3,},{4,5,6}}; // A now has the dimensions [2][3]
,但你不能說:
array A;
在這種情況下,沒有指定A
的第一個維度,所以編譯器沒有按不知道要爲它分配多少空間。
注意,它也是蠻好用的一個函數定義這種array
型 - 在函數定義數組由編譯器將被轉換爲指針,以他們的第一個元素:
// these are all the same
void foo(array A);
void foo(int A[][3]);
void foo(int (*A)[3]); // this is the one the compiler will see
注意,在這種情況下:
void foo(int A[10][3]);
編譯器仍然可以看到
void foo(int (*A)[3]);
因此,A[10][3]
的10
部分被忽略。
總結:
typedef int array [3][]; // incomplete type, won't compile
typedef int array [][3]; // int array (of as-yet unspecified length)
// of length 3 arrays
相關問題
有關的typedef解析更多細節: http://publications.gbdirect.co.uk/c_book/chapter8/typedef.html – 2012-01-08 22:54:07