0

新しいプロジェクトの既存のコードを変更しています。動的メモリ割り当てを削除し、静的宣言を使用するように指示されました。

変数 arp があります。以前は double ポインターでしたが、malloc を使用してメモリが割り当てられ、2D 配列としてアクセスされます。

今、私はそれを配列へのポインタとして変更しました: char (*arrp)[];

arp が指す 2D 配列のサイズは、実行時にのみわかります。私の問題は、サイズが宣言されていない場合、コンパイラがエラーをスローすることです('char (*)[]' : unknown size)

次のコードを参照してください。私はこのようなことをしました

char (*arrp)[]; //This will be from different module, 
        //I have declared as local variable for our reference

char (*parr)[2];

char arr[3][2];

parr = &(arr[0]);   
arrp = (char (*)[])&(arr[0]);

//inside loops for i, j
...

printf("%c",parr[i][j]); // This works fine
printf("%c",arrp[i][j]); // Error :'char (*)[]' : unknown size) 

....
//Some code

arp宣言時は配列のサイズを取得できません。このエラーを解消する方法はありますか?

4

1 に答える 1

0

配列へのポインターは、一度に配列全体をジャンプするのに役立ちます。(つまり、単一のインクリメントで) これは、ジャンプする配列の列幅を知ることによって行われます。したがって、列のサイズを知らなければ、配列へのポインターは役に立たないでしょう。

しかし、可変長配列 ( C99 ) をサポートする最新のコンパイラを使用している場合は、非常に単純です。

int foo ( int m, int n )
{
    int a[m][n];
    int (*ptr)[n]=a;
    a[0][2] = 78;
    printf("%d", ptr[0][2]);

}
于 2012-04-12T10:51:40.637 に答える