0

CとC#を学んでいます。ポインターについて学んでいますが、間接演算子とアドレス演算子を組み合わせる意味がわかりません。2つを組み合わせるとはどういう意味ですか?

次に例を示します。

    int *p, *q;
    p = *&q;
4

4 に答える 4

3

&address of (<something>)オペレーターと考えることができます。q&qのアドレスも同様です。今ではオペレーター*と考えることができます。value at (<something>)したがって、*q は基本的に、q に含まれるアドレスに格納される値です。つまり、*変数は常にアドレスを含むものとして扱います。*&q は、結合性によって *(&q) になります。つまり

value stored at (address of q)と同じですvalue stored at q

q はポインタであるため、q のアドレスは別のアドレスを持つことになります。だからそれは同じです

p=q

于 2013-11-05T11:02:30.103 に答える
3

それは、それが何を意味しなければならないかを意味します。:)

左から右に読むと、右側は単に「のアドレスを値とするポインタをたどることによって取得される値」を意味しますq

と同じなのでp = *(&q);、 と同じp = q;です。

私も気づきませんでしたが、あなたのプログラムは宣言するのもポインターpにするのも間違っています。qそれはコンパイルされません。次のようにする必要があります。

int p, q;

p = *&q;

q また、これは、読み取られる前に値が割り当てられることはなく、それについて 100% 確実ではないため、少し不明確である可能性があります。

于 2013-11-05T10:57:42.827 に答える
0

この例では、ポインター p をポインター q の値に設定します。p と q が指すには何もしません。変数 p を変数 q の値に設定するだけで、どちらもたまたま整数値へのポインターです。いくつかの例を見てみましょう:

*p = *q; // the value at the address pointed by q, gets copied to the address, pointed by p
p = &q; // this is illegal, since the type of &q is int ** (pointer to a pointer to an integer), but the type of p is int *
于 2013-11-05T11:02:03.893 に答える
0
&q;

変数qのアドレスが得られます。つまり、qへのポインターであり、次のように記述できます

int ** pointerToQ = &q;

私たちが言うなら

*pointerToQ

これは q そのものです。そう

*&q 

q に戻るだけです。

于 2013-11-05T10:59:53.153 に答える