你的這項聲明不起作用:
int *array[][]; // this is a pointer to a 2-dimensional array??
首先,它試圖申報int *
二維數組。其次,當你聲明或定義一個數組時,除第一個之外的所有維都必須被指定(大小)。
int (*array)[][2]; // This is a pointer to a 2D array of unknown size
這現在可以在你的函數的一個主要變體中使用。這是一個變種,因爲我起初誤解了你的問題。
void load(void)
{
...
int tempArray[n][2]; // Note the reversed order of dimensions!
...
array = &tempArray;
...there must be some code here calling functions that use array...
array = 0;
}
請注意,該作業需要數組名稱上的&
。在其他函數中,您需要編寫以下代碼:
n = (*array)[i][j];
注意,將局部數組的地址賦值給全局變量也是危險的。一旦功能load()
返回,tempArray
的存儲空間不再有效。因此,進行賦值的唯一安全方法是調用引用全局變量的函數,然後在退出函數之前重置全局變量。 (或者至少認識到該值是無效的,但將其設置爲零 - 空指針 - 將更接近確保程序崩潰,而不是僅訪問隨機存儲器。爲陣列動態分配內存。
你的問題其實就是想使一個全球性的指針VLA,變長數組,其中變量維度是不是第一次:
int tempArray[2][n]; // Note the reversed order of dimensions!
你根本無法建立一個全球性的指針,這樣數組。
因此,有多個問題:
- 符號爲指向數組
- 初始化指向數組
- 分配全局指針局部變量
- 你不能有全球指針到多其中可變長度不在第一維中的三維VLA。
- 您應該儘量減少使用全局變量。