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");
}
}
上面的代码中函数声明、调用和定义中的数组分别有哪几种写法?都是什么含义?
请帮忙解答,万谢。 展开
比如下面一段代码:
#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");
}
}
上面的代码中函数声明、调用和定义中的数组分别有哪几种写法?都是什么含义?
请帮忙解答,万谢。 展开
3个回答
展开全部
不是写法的问题,可能你对数组的具体含义还不太清楚哈。
一个一维数组的数组名是指向这个数组首地址的指针,比如:
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);
一个一维数组的数组名是指向这个数组首地址的指针,比如:
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);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是写法的问题,可能你对数组的具体含义还不太清楚哈。
一个一维数组的数组名是指向这个数组首地址的指针,比如:
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);
一个一维数组的数组名是指向这个数组首地址的指针,比如:
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);
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询