我一周前开始学习C语言。
为了测试,我决定编写一个井字游戏。
我有一块田地。
int field[3][3];
和一个函数 printField
void printField(int field[3][3]){
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
printf("%i", field[i][j]);
}
printf("\n");
}}
它在 main 中的工作方式如下:
int main(){
printField(field);}
但如果我改变
void printField(int field){...}
or
void printField(int field[][]){...}
它给了我一堆错误:
subscripted value is neither array nor pointer nor vector
passing argument 1 of ‘printField’ makes integer from pointer without a cast
note: expected ‘int’ but argument is of type ‘int (*)[3]’
为什么我不能像这样传递数组?
还有其他方法可以通过吗?
该函数独立于对该函数的任何调用。因此该函数无法从程序的其余部分猜测数组大小是多少。在函数体中,您必须有常量或变量来表示所有维度。
您可以使用变量来代替固定大小:
void printField(int r, int c, int field[r][c])
{
for(int i = 0; i < r; i++)
for(int j = 0; j < c; j++)
printf("%i", field[i][j]);
printf("\n");
}
并调用该函数:
printField(3, 3, field);
您可以根据数组的名称计算维度。使用宏限制了丑陋的语法:
#define printField(a) printField( sizeof(a)/sizeof((a)[0]), sizeof((a)[0]) / sizeof((a)[0][0]), (a) )
int f1[3][3] = { 0 };
printField(f1);
int f2[4][5] = { 0 };
printField(f2);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)