【问题标题】:Pointers: a query about pointers指针:关于指针的查询
【发布时间】:2013-11-16 05:26:17
【问题描述】:

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

这是一个例子:

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

【问题讨论】:

  • 认为它与提升到权力并采取(积极的)根源相同。基本上,它们只是相互抵消。

标签: c pointers expression indirection addressof


【解决方案1】:

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

如果从左到右阅读,右手边的意思是“通过跟随指针检索到的值,其值为q的地址”。

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

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

int p, q;

p = *&q;

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

【讨论】:

    【解决方案2】:
    &q;
    

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

    int ** pointerToQ = &q;
    

    如果我们说

    *pointerToQ
    

    我们要求pointerToQ 指向什么,即q 本身。所以

    *&q 
    

    只是让我们回到 q。

    【讨论】:

      【解决方案3】:

      您的示例将指针 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 *
      

      【讨论】:

        【解决方案4】:

        & 可以被认为是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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-05-13
          • 1970-01-01
          • 1970-01-01
          • 2014-05-13
          • 2011-12-09
          • 1970-01-01
          • 2012-05-09
          • 1970-01-01
          相关资源
          最近更新 更多