我想搬到另一个函数(类型为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)'可能会让你的代码更容易阅读 –