コード ( を使用してコンパイルgcc -std=c99
) ...
#include <stdio.h>
#include <stdlib.h>
typedef int mytype[8][8];
int main(void)
{
mytype CB;
for (int r=0; r<8; r++) {
for (int c=0; c<8; c++) {
CB[r][c] = 5;
}
}
mytype *CB2 = &CB;
for (int r=0; r<8; r++) {
for (int c=0; c<8; c++) {
printf("%d ",*CB2[r][c]);
}
printf("\n");
}
return 0;
}
stdout
all であると想定される間違ったデータ (最初の行のデータのみが正しい) に出力されます5
。他の配列項目のポインターがメモリ内でシフトされていることがわかりましたが、その理由はわかりません。
目的は明らかだと思います:CB
最初のループで配列の内容を設定し、2 番目のループでそれを出力します。これはモデルのみです。ポインターは必要なのでそこにあります。
私は何を間違っていますか?