C语言 数组作为参数传递问题

2024-11-23 11:13:11
推荐回答(2个)
回答1:

  • 以下是我写的一个简单的例子,一维数组和二维数组传参。

  • 以下是运行结果,写的不好请指正,如图所示。

回答2:

不是写法的问题,可能你对数组的具体含义还不太清楚哈。
一个一维数组的数组名是指向这个数组首地址的指针,比如:
int a[3]={1,2,3};
printf("%d",*a);
输出:1
a就是指向这个数组的首地址的指针,当用:
int *b;
b=a+1;//a地址加1,指向下一个元素
printf(%d",*b);
输出:2

二维数组名是指向数组首行的指针,与一维类似,但区别也很大,具体的你去翻你的课本吧,没课本去百度百科。

在说函数,先说了,数组名其实就是指针,但a[2]这就是数值了,所以在申明函数的时候你可以这样申明(或定义):
static void DisplayBoard(char board[][3])
{printf("%c",board[0][0]);}
也可以这样申明(或定义):
static void DisplayBoard(char *board)
{printf("%c",board[0][0]);}
这两种申明方式是等价的,都可以用下标法访问。

在调用的时候,函数要求的是输入数组,如果你用:
DisplayBoard(board[3][3]);
这是不行的,board[3][3]是一个数值,而不是一个数组,数组做参数时是将数组首地址传递给函数了,所以用数组名或者用指针都可以:
char *a;
a=board
//下面两种效果是一样的
DisplayBoard(board);
DisplayBoard(a);