-3

だから、彼らがそれを書いたとき、私はほとんどクラスメートに大騒ぎしました

&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

4

1 に答える 1

1
于 2017-01-10T18:35:27.137 に答える