【问题标题】:Struct pointer versus actual struct结构指针与实际结构
【发布时间】:2014-09-12 03:52:01
【问题描述】:

为什么struct somestruct* mystruct = ... 是指向somestruct 类型的struct 的指针? * 不是取消引用 mystruct 吗?

【问题讨论】:

    标签: c pointers


    【解决方案1】:

    否。在变量声明中,* 是类型说明符的一部分。

    我知道一开始这有点令人困惑,但事实就是如此。如果您发现很难习惯尝试复制一些涉及指针符号的表达式并练习将它们翻译成英文,例如“somestruct pointer my struct equals...”和“mystruct 指向的值是...” .

    【讨论】:

    • 更多信息:许多符号在声明中的含义与在声明中的含义不同,例如*&=
    【解决方案2】:

    struct somestruct* mystruct; 使 mystruct 成为 TYPE 的变量:struct somestruct*

    因此mystruct 是指向struct somestruct 的指针

    这是在mystruct 的声明期间。

    使用 mystruct 时:(*mystruct).foo=10; 取消引用 mystruct

    【讨论】:

      【解决方案3】:

      * 运算符用于引用已经声明的变量时是一个deferencing operator,用于初始化时表示初始化的变量是一个指针

      【讨论】:

      • 在声明中它根本不是一个操作符。 “运算符”意味着它接受输入值并产生输出值。
      【解决方案4】:

      理解这一点需要您了解指针的基础知识,以及指针的工作原理。总之,您在程序中声明的每个变量都存储在计算机内存中的某个位置,当访问变量时,硬件使用该位置的地址。

      因此,指针只是一个变量,它存储另一个变量的内存地址。

      somestruct *mystruct = ...
      

      告诉计算机 “嘿,这是 somestruct name mystruct 类型的指针!”。 mystruct 前面的 ' * ' 只是告诉编译器这是一个指针。

      这是我们定义指针的标准方式,如果你能理解以下内容,同样的概念也适用于声明结构指针:

      char *mychar = ...
      double *mydouble = ...
      

      明白了吗?第一行简单地告诉 C 编译器这是一个指向类型 char name *mychar 的指针。猜猜第二行的作用。 :)

      【讨论】:

        猜你喜欢
        • 2018-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-21
        • 1970-01-01
        相关资源
        最近更新 更多