C を学習しようとしていますが、次のコードで行き詰まりました。C に関する基礎知識からわかったことは、配列名自体が配列の最初の要素を指すポインターであるということです。そして、2D配列の要素は次々に格納されます。そのため、配列名をポインターとして使用して、1D配列と2D配列の要素の値を出力しようとしています。しかし、Code 1
それは私が期待したように機能しています。しかしCode 2
、予期しない結果が得られます (各行の開始アドレスが得られます)。これが起こる理由は何ですか?私の理解に何か問題があると思います。誰でも間違いを明確にすることができます。
// Code 1
//-------
#include <stdio.h>
int main () {
int array[2][3] = {{5, 7, 9}, {2, 5, 77}};
int j;
for (j=0; j < 6; j++)
printf("%d\t", *(array+j));
return 0;
}
//Code 2
//------
// #include <stdio.h>
// int main () {
// int array[6] = {5, 7, 9, 2, 5, 77};
// int j;
// for (j=0; j < 6; j++)
// printf("%d\t", *(array+j));
// return 0;
// }