0

ポインタに少し疑問があります。助けてください。

void main()
{
    int x[10],*px=x,*py;
    int i;
    py = &x[5], i = py - (px);

    cout << "\nThe value of px=x is:" << (int)px << "\n";
    cout << "x[0]\t" << (int)x << "\n";
    cout << "x[5]\t" << (int)&x[5] << "\n";
    cout << "\nThe value of i=py-px is\n";
    cout << i;
}

上記のプログラムでは、配列(メモリ)に相当する整数の差を2で割った値(10/2 = 5)として「i」の値を取得します。なぜそれが差だけではないのか、つまり10 ??

前もって感謝します!!

4

1 に答える 1

1

ポインターを使用して 2 つの配列要素の違いを取得しようとしている場合は、ポインターを逆参照する必要があります。

i = *py - *px;

あなたが書いた方法では、2つのアドレスの差を計算しています。これは、ポインタをにキャストしない限り、5になるはずvoid *です5 * sizeof(int)。システム - 答えは異なります)。

ああ、x[]とにかく初期化していないので、結果は少し...ランダムになるかもしれません...

于 2013-02-19T16:19:31.247 に答える