程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> C語言 數組作為參數傳遞問題

C語言 數組作為參數傳遞問題

編輯:C語言問答

C語言 數組作為參數傳遞問題

請問數組作為參數在函數原型中一定要寫"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");
}
}
上面的代碼中函數聲明、調用和定義中的數組分別有哪幾種寫法?都是什麼含義?
請幫忙解答,萬謝。

最佳回答:

不是寫法的問題,可能你對數組的具體含義還不太清楚哈。
一個一維數組的數組名是指向這個數組首地址的指針,比如:
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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved