0

これは私の教科書の問題の一部でした。それが何をどのように行うのか正確に理解できないので、助けを求めに来ました。

int a = 5, b[] = {1, 2, 3, 4, 5};
int *ptr1, *ptr2;
void *ptr3;
ptr1 = &a;
ptr2 = b;
ptr3 = (int*) &ptr2;

この行がわかりません

ptr3 = (int*) &ptr2;

私の最善の推測はptr3、現在指しているのと同じアドレスを指している int ポインターに割り当てられていることです。ptr2これは arraybです。だから基本的にptr3 = b

Is this correct? Can someone explain?

4

1 に答える 1

4

*&ptr2ポインタのアドレスが得られますptr2ptr2と同じ場所b、つまりその配列の最初の int のアドレスを指している間、 のアドレスが格納されptr3ている場所を指します。これは、その瞬間になることを意味します。ptr2bint**

次のように、注意してください。ptr2 と b は同じ値を持ちますが、メモリ内では異なります。

ptr3 -> ptr2 -> 1,2,3,4,5

           `b /^`

次に、コードはそれをint *for 理由にキャストし続けますが、これは実際には意味がなく、void *宣言された への代入で使用されptr3ます。私にはかなり間違っているように見えます。どこで見つけたとしても、その情報源を忘れてください。

于 2012-12-18T04:50:56.627 に答える