配列へのポインターを次のように宣言することもできます。
int (*ptr)[]; // ptr is a pointer to array.
あなたがするとき
ptr2 = myArray1;
コンパイラは警告メッセージをスローします。Look boss types are not compatible.
一部のコンテキストでは、配列はポインターに崩壊します。警告メッセージは、配列がポインターに崩壊するとき、崩壊した型がポインターであるためです。この場合、あなたがするとき
ptr1 = myArray;
myArray は に減衰しint *ます。
しかし、あなたがそうするとき、
ptr2 = myArray1;
myArray1はポインター isint *に減衰しますが、の型はptr2isint (*)[]です。
警告を避けるために、あなたは言うべきです
ptr2 = &myArray1; //&myArray1 returns address of array and type is int(*)[].
なぜこのステートメントはガベージを印刷するのですか? 正しい言い方は?誰でも説明できますか?
printf("%d",ptr2[3]);// prints some garbage.
そうだね。でも何で?最初に正しいステートメントを見てみましょう...(インデックスは3未満でなければならないことに注意してください)
printf("myArray1[%d] = %d\n", i, (*ptr2)[2]);
(*ptr2)[i]配列要素を出力するために使用する必要があります。これは、 に言及するだけptr2で、配列のアドレスを取得するためです (一部のアドレスではありませんint)。それを逆参照することで、配列(*ptr2)のアドレスを取得します。0th element