我正在学习C和C#。我正在学习指针,不知道组合间接运算符和地址运算符意味着什么。将两者结合起来意味着什么?
以下是一个例子:
int *p, *q;
p = *&q;
答案 0 :(得分:3)
这意味着它必须意味着什么。 :)
如果您从左向右阅读,右侧只是表示“通过遵循其值为q
”地址的指针来检索该值。
与p = *(&q);
相同,因此与p = q;
相同。
我甚至没有注意到,但是你的程序错误地宣称p
和q
是指针。那不会编译,应该是:
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
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 *