0

この例では、4 つの要素の配列があります。配列のアドレスを含む整数へのポインターを宣言しました。次に、0 番目のインデックスのアドレスを 3 つの異なる方法で表示しました。同様に、1 番目のインデックスのアドレスは、3 つの異なる方法で表示されます。これ (&pNumbers)+0 を出力すると、一意の異なるアドレスが表示されることはかなり理解できます。次の行で、*(&pNumbers+0) は 0 番目のインデックス アドレスを表示します (ポインターによって含まれているため)。ここで問題の部分が来ます。この (&pNumbers)+1 行を出力すると、配列の 0 番目のインデックスが再び表示されます。なんで ?

最初の質問: ポインター アドレス (&pNumbers) を取得すると、新しい一意のアドレスが表示されます。しかし、そのアドレスを合計すると。配列の要素アドレスにどのようにアクセスしていますか? 例えば

enter code here

cout<<" (&pNumbers)+1 "<<(&pNumbers)+1<<endl // new address + 1 but showing address of 0 element.

cout<<" (&pNumbers + 2) "<<(&pNumbers+2)<<endl // showing address of of 1st index

2番目の質問:対応する配列要素を何らかの形で指している場合。配列要素に対応する正しいデータ値が表示されない理由を逆参照します。例えば

enter code here
cout<<" *(&pNumbers+1) "<< *(&pNumbers+1) // assumption was 31 (but displaying some 0x1f)

cout<<" *(&pNumbers + 2) "<<*(&pNumbers+2)<<endl // assumption was 28 (but displpaying 0x1c)

以下はソースコードです。

#include <iostream>
#include <string>
#include <conio.h>

using namespace std;

int main()
{int number[] = { 31, 28, 31, 30};
    int *pNumbers = number;

    cout<<" Address of number[0] "<<number<<endl;
    cout<<" Address of number[1] "<<number+1<<endl;
    cout<<" Address of number[2] "<<number+2<<endl;
    cout<<" Address of number[3] "<<number+3<<endl<<endl;

    cout<<" Address of &pNumbers "<< &pNumbers<<endl<<endl; // address of pNumbers

    cout<<" Address of number "<< number<<endl; // address of array's first element
    cout<<" pNumber Address "<< pNumbers<<endl;
    cout<<" &(pNumbers[0]) "<< &(pNumbers[0])<<endl<<endl;

    cout << " pNumbers+1:  " << pNumbers+1<<endl; //address of array's second element
    cout<<" (&pNumbers[1]) "<<(&pNumbers[1])<<endl; //
    cout<<" (pNumbers+1) "<< (pNumbers+1) <<endl<<endl;

    cout<<" (&pNumbers)+0 "<< (&pNumbers)+0<<endl;
    cout<<" *(&pNumbers+0) "<< *(&pNumbers+0)<<endl<<endl;

    cout<<" (&pNumbers)+1 "<<(&pNumbers)+1<<endl<<endl; // new address + 1 expected but displaying array's 0th index address why ?
    cout<<" *(&pNumbers+1) "<<*(&pNumbers+1)<<endl<<endl;

    cout<<" (&pNumbers + 2) "<<(&pNumbers+2)<<endl<<endl;
    cout<<" *(&pNumbers + 2) "<<*(&pNumbers+2)<<endl<<endl;

    cout<<" (&pNumbers + 3) "<<(&pNumbers+3)<<endl<<endl;
    cout<<" *(&pNumbers + 3) "<<*(&pNumbers+3)<<endl<<endl;

    cout<<" (&pNumbers + 4) "<<(&pNumbers+4)<<endl<<endl;
    cout<<" *(&pNumbers + 4) "<<*(&pNumbers+4)<<endl<<endl;

    return 0;
}
4

1 に答える 1