0

変更される関数呼び出しへのさまざまなアクセスを通じて、多次元文字配列の内容を維持しようとしています。どうやってやるの。配列を関数に渡す必要がありますか? だったらどうしよう。ただし、構文エラーが発生しています。これは私の関数宣言です

void board(int,int,int);

多次元文字配列への参照を追加する必要がありますか?

char piece[3][3];

関数を呼び出すとき、どうすれば配列に渡すことができますか?

board(whichplayer,rownum,columnnum);

関数自体で、それを追加して使用し、宣言するにはどうすればよいですか?

void board(int movesquare, int row, int column)
 {
  //...
 }
4

1 に答える 1

1

配列がグローバル変数として宣言されている場合、宣言されている同じファイル内のすべての関数で、配列を関数パラメーターとして渡す必要はありません。
例:

char myArray[3][3];
void some_function(int var1,int var2);

int main(void)
{
  some_function(2,3);
.
.
.

}
void some_function(int var1, int var2)
{
extern int myArray[][3]; /* not necessary but just a reminder that 
                         you will use global variable in your function, 
                         size not necessary because this information in given
                          in  declaration on top */

myArray[var1][var2]=x; /* legal to modify global array */
.
.
.
}

myArray をグローバルにしたくない場合 (多くの理由で、多くの人がそうしないと言うでしょう)、その配列を引数として関数に渡す必要があります。
例 2:

void some_function(char passed_array[][3],int size,int var1, int var2)
    /* array will be treated as pointer to 1d 3-elements array of chars,
    so empty first size   is unnecessary in first argument,
    but you will probably want to know what's the 
    true size so you pass it as 2nd argument to function */

int main(void)
{
  char myArray[3][3];
  some_function(myArray,3,1,1);
  .
  .
  .
}
void some_function(char passed_array[][3],int size, int var1, int var2)
{
  passed_array[var1][var2]=x; /* passed_array is a pointer so changes made here 
  will be visible as changes in myArray in main */
.
.
.
}
于 2013-10-05T22:24:31.883 に答える