0

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

这是一个例子:

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

4 回答 4

3

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

如果您从左到右阅读它,右侧只是表示“通过跟随其值是地址的指针检索的值q”。

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

我什至没有注意到,但是您的程序声明pq成为指针是错误的。那不会编译,它应该是:

int p, q;

p = *&q;

此外,这可能有点不明确,因为q 在读取之前从未分配过值,对此不是 100% 确定的。

于 2013-11-05T10:57:42.827 回答
3

&可以认为是address of (<something>)运算符。&qq的地址也是如此。现在*可以被认为是一个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 回答
0
&q;

会给你变量 q 的地址,也就是我们可以写的指向 q 的指针

int ** pointerToQ = &q;

如果我们接着说

*pointerToQ

我们正在询问指针ToQ 指向的任何内容,即 q 本身。所以

*&q 

只是让我们回到q。

于 2013-11-05T10:59:53.153 回答
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 回答