我正在学习 C 和 C#。我正在学习指针,不知道将间接运算符和地址运算符结合起来意味着什么。将两者结合起来是什么意思?
这是一个例子:
int *p, *q;
p = *&q;
我正在学习 C 和 C#。我正在学习指针,不知道将间接运算符和地址运算符结合起来意味着什么。将两者结合起来是什么意思?
这是一个例子:
int *p, *q;
p = *&q;
它意味着它必须意味着什么。:)
如果您从左到右阅读它,右侧只是表示“通过跟随其值是地址的指针检索的值q
”。
它与 相同p = *(&q);
,因此与 相同p = q;
。
我什至没有注意到,但是您的程序声明p
和q
成为指针是错误的。那不会编译,它应该是:
int p, q;
p = *&q;
此外,这可能有点不明确,因为q
在读取之前从未分配过值,对此不是 100% 确定的。
&
可以认为是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
&q;
会给你变量 q 的地址,也就是我们可以写的指向 q 的指针
int ** pointerToQ = &q;
如果我们接着说
*pointerToQ
我们正在询问指针ToQ 指向的任何内容,即 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 *