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

请问数组作为参数在函数原型中一定要写"voidfunction(intarray[])",在调用时就把[]去掉,这是为什么?比如下面一段代码:#include<stdio... 请问数组作为参数在函数原型中一定要写"void function(int array[])",在调用时就把[]去掉,这是为什么?
比如下面一段代码:
#include <stdio.h>
static void DisplayBoard(char board[][3]);
main()
{
char board[3][3]={{'X','O','X'},{' ','X','O'},{'X',' ','O'}};
DisplayBoard(board);

return 0;
}

static void DisplayBoard(char board[][3])
{
int row,column;
for(row=0;row<3;row++)
{
if(row!=0)
printf("---+---+---\n");
for(column=0;column<3;column++)
{
if(column!=0)
printf("|");
printf("%3c",board[row][column]);
}
printf("\n");
}
}
上面的代码中函数声明、调用和定义中的数组分别有哪几种写法?都是什么含义?
请帮忙解答,万谢。
展开
 我来答
三生石wl
推荐于2016-05-04 · TA获得超过134个赞
知道小有建树答主
回答量:184
采纳率:100%
帮助的人:52.8万
展开全部
  • 以下是我写的一个简单的例子,一维数组和二维数组传参。

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

叁生万物
2015-10-08 · TA获得超过6259个赞
知道小有建树答主
回答量:2871
采纳率:41%
帮助的人:1026万
展开全部
不是写法的问题,可能你对数组的具体含义还不太清楚哈。
一个一维数组的数组名是指向这个数组首地址的指针,比如:
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);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
186044
推荐于2018-02-27 · TA获得超过1966个赞
知道大有可为答主
回答量:848
采纳率:0%
帮助的人:1317万
展开全部
不是写法的问题,可能你对数组的具体含义还不太清楚哈。
一个一维数组的数组名是指向这个数组首地址的指针,比如:
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);
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式