我想搬到另一個函數(類型爲void)數組,改變數組的值移動的typedef枚舉陣列,但每個時代我有在海灣合作委員會的錯誤在另一個函數
我有那些以下規則:
-
在這個練習中它是被禁止使用全局變量
- ,
- 我們希望通過參照陣列移動,而不是使用指針:
。
#include <stdio.h>
typedef enum {F=0,T=1} Mat;
//==========================//
void unknown(Mat b[][][]){
b[0][0][0]=7;
printf("%d\n",b[0][0][0]);
}
//=========================//
int main(void){
Mat b[2][2][2];
b[0][0][0]=1;
printf("%d\n",b[0][0][0]); //before the unknown
uknown(b);
printf("%d\n",b[0][0][0]); //after unknown
return 0;
}
我有以下錯誤:
test.c:7:18: error: array type has incomplete element type ‘Mat[] {aka enum []}’ void unknown(Mat b[][][]){ ^test.c: In function ‘main’: test.c:21:9: error: type of formal parameter 1 is incomplete unknown(b); ^
的問題是:我需要改變陣列的價值不是主力,但在函數void未知,並檢查主要(在改變void Mat未知值的數組Mat)後,如果這個數組通過引用改變這個值,怎麼了?在代碼中需要更改什麼?
(我的gcc版本:GCC(Ubuntu的5.4.0-6ubuntu1〜16.04.4)5.4.0 20160609)
在未知函數中,您必須指定最後兩個維度,並可以指定第一個維度。 '墊子b [] [2] [2]'。 –
關於你的規則#2,在C中沒有參考的概念。在這種情況下,你正在有效地傳遞指針。你可以查詢「陣列衰減」以獲取更多信息。這個答案闡述更多http://stackoverflow.com/questions/1461432/what-is-array-decaying#1461449 – diametralpitch
就這樣你知道'b [2] [2] [2]'和'b [8]'是當你將它們傳遞給函數時,數組會衰減成指針,所以'Mat b [8];''和'void unknown(Mat * b)'可能會讓你的代碼更容易閱讀 –