だから、彼らがそれを書いたとき、私はほとんどクラスメートに大騒ぎしました
&array
最初の要素のアドレスを提供します
しかし、彼らは正しいことがわかりました。これは私には矛盾しているように聞こえます。次のように定義された配列について話しています。
int numbers[] = {1,2,3,4};
変数numbers
は(私が思うに)タイプint* const
です。それへのポインタはint** const
. しかし、どうやらこの式は true と評価されます。
if(&numbers == numbers) {
printf("Pointer to array is still the same array!\n");
}
そしてもちろん、これも真です。
int* first_elm_ptr = &numbers;
if(*first_elm_ptr == *numbers)
printf("%d == %d\n", *first_elm_ptr, *numbers);
したがって、明らかに、その配列のアドレスを保持する変数へのポインターを取得できません。表現&numbers
は本質的に無意味です。たぶん、コンパイラによって削除されることさえあります。
それはどのように可能ですか?私は今とても混乱しています!標準はこの動作をどのように説明していますか? これを確認するためのイデオン テスト コードを作成しました: http://ideone.com/pYffYx