【发布时间】:2013-11-16 05:26:17
【问题描述】:
我正在学习 C 和 C#。我正在学习指针,不知道将间接运算符和地址运算符结合起来意味着什么。两者结合是什么意思?
这是一个例子:
int *p, *q;
p = *&q;
【问题讨论】:
-
认为它与提升到权力并采取(积极的)根源相同。基本上,它们只是相互抵消。
标签: c pointers expression indirection addressof
我正在学习 C 和 C#。我正在学习指针,不知道将间接运算符和地址运算符结合起来意味着什么。两者结合是什么意思?
这是一个例子:
int *p, *q;
p = *&q;
【问题讨论】:
标签: c pointers expression indirection addressof
这意味着它必须意味着什么。 :)
如果从左到右阅读,右手边的意思是“通过跟随指针检索到的值,其值为q的地址”。
与p = *(&q);相同,因此与p = q;相同。
我什至没有注意到,但是您的程序将 p 和 q 声明为指针是错误的。那不会编译,应该是:
int p, q;
p = *&q;
此外,这可能有点不明确,因为 q 在被读取之前从未被赋值,对此不是 100% 确定的。
【讨论】:
&q;
会给你变量 q 的地址,即我们可以写的指向 q 的指针
int ** pointerToQ = &q;
如果我们说
*pointerToQ
我们要求pointerToQ 指向什么,即q 本身。所以
*&q
只是让我们回到 q。
【讨论】:
您的示例将指针 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 *
【讨论】:
& 可以被认为是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
【讨论】: