2012-01-08 55 views

回答

1

你會得到一個診斷。

int [x][]是一個不完整的數組類型,無法完成。

3

你會得到一個編譯錯誤。對於多維數組,最多可以省略第一維。因此,例如,int array[][x]應該是有效的。

+1

有關的typedef解析更多細節: http://publications.gbdirect.co.uk/c_book/chapter8/typedef.html – 2012-01-08 22:54:07

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