重複の可能性:
C:2次元配列へのポインターを作成します
配列が定義されている場合、
int k[100];
int *にキャストできます:
int* pk = k;
多次元配列をキャストできるポインタ変数はありますか?
int m[10][10];
??? pm = m;
重複の可能性:
C:2次元配列へのポインターを作成します
配列が定義されている場合、
int k[100];
int *にキャストできます:
int* pk = k;
多次元配列をキャストできるポインタ変数はありますか?
int m[10][10];
??? pm = m;
int m[10][20];
int (*pm)[20] = m; // [10] disappears, but [20] remains
int t[10][20][30];
int (*pt)[20][30] = m; // [10] disappears, but [20][30] remain
ただし、これは「キャスト」ではありません。キャストは明示的な型変換です。上記の例では、変換は暗黙的です。
また、ポインタの種類が最初の配列を除くすべての配列の次元に依存していることにも注意してください。このコンテキストで機能する完全に「無次元」のポインター型を使用することはできません。つまり、int **
ポインターは組み込みの2D配列では機能しません。int ***
また、組み込みの3D配列を持つポインターもありません。
はい、もちろん、多次元配列へのポインタを持つことができます。
int m[10][10];
int (*pm)[10] = m;
これはどう:
int k[100];
int* pk = k;
int m[10][10];
int **ptr = (int **) malloc(10 * sizeof(int*));
for(int i=0;i<10;i++)
{
ptr[i] = m[i];
}