-1

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;
// }
4

4 に答える 4