1

malloc を使用して定義した 2 次元配列を関数に渡したい。まず、ブログ投稿のコードを使用して配列を定義します。

    int** Make2DIntArray(int arraySizeX, int arraySizeY) {  
    int** theArray;  
    theArray = (int**) malloc(arraySizeX*sizeof(int*));  
    for (int i = 0; i < arraySizeX; i++)  
       theArray[i] = (int*) malloc(arraySizeY*sizeof(int));  
       return theArray;  
    }   

int main(){

int** myArray = Make2DIntArray(nx, ny); 

}

これを myArray[i][j] として使用できます。その後、この配列を関数に渡したいと思います。次のように渡そうとしました:

function(myArray); //function call

//function

void function(int myArray[][]){
//function code goes here
}

しかし、これは間違っています。問題は、配列のサイズが毎回異なることです。また、配列の列の最大サイズを定義して、次のように使用しようとしました:

#define COLUMNMAX 100

function(myArray); //function call

    //function

    void function(int myArray[][COLUMNMAX]){
    //function code goes here
    }

しかし、私はエラーが発生しました:

仮パラメータ 1 の型が不完全です。どのように渡すことができますか?

4

6 に答える 6

2

パラメータはint**

また、malloc の戻り値をキャストする必要はありません。NULL でないかどうかを確認するだけです。

ただし、malloc を使用しているため、不要になった場合は free を使用しないでください。

于 2013-06-21T13:13:54.417 に答える
2

C 標準では可変長配列がサポートされているため、追加のポインターを割り当てたり、割り当てたり、使用したりする必要はありません。以下に示すように、必要な寸法を指定するだけです。

次のように、N 列の M 行の配列を割り当てます。

int (*array)[N] = malloc(M * sizeof *array);

このような配列を受け取る関数を次のように宣言します。

void function(size_t M, size_t N, int array[][N]);

次のように配列を関数に渡します。

function(M, N, array);
于 2013-06-21T13:30:00.037 に答える
2

myArray境界がわからないので、に変更 void function(int myArray[][]){する 必要がありますvoid function(int **myArray){

malloc の型キャストを行わない

于 2013-06-21T13:21:00.263 に答える