指针:关于指针的查询

时间:2013-11-05 10:53:59

标签: c pointers expression indirection addressof

我正在学习C和C#。我正在学习指针,不知道组合间接运算符和地址运算符意味着什么。将两者结合起来意味着什么?

以下是一个例子:

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

4 个答案:

答案 0 :(得分:3)

这意味着它必须意味着什么。 :)

如果您从左向右阅读,右侧只是表示“通过遵循其值为q”地址的指针来检索该值。

p = *(&q);相同,因此与p = q;相同。

我甚至没有注意到,但是你的程序错误地宣称pq是指针。那不会编译,应该是:

int p, q;

p = *&q;

此外,这可能有点不明确,因为q在被读取之前从未被赋值,而不是100%肯定。

答案 1 :(得分:3)

&可以被视为address of (<something>)运算符。所以&q是q的地址。现在*可以被视为value at (<something>)运算符。所以* q基本上是存储在q中包含的地址的值,即*将变量视为始终包含地址。现在*&amp; q,关联性是*(&amp; q)。这意味着

value stored at (address of q)value stored at q

相同 由于q是指针,因此q的地址将具有另一个地址。所以它与

相同

p=q

答案 2 :(得分:0)

&q;

会给你变量q的地址,也就是说它是指向q的指针

int ** pointerToQ = &q;

如果我们再说

*pointerToQ

我们要求指针指向toToQ,这本身就是q。所以

*&q 

让我们回到q。

答案 3 :(得分: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 *
相关问题