【发布时间】:2014-09-12 03:52:01
【问题描述】:
为什么struct somestruct* mystruct = ... 是指向somestruct 类型的struct 的指针? * 不是取消引用 mystruct 吗?
【问题讨论】:
为什么struct somestruct* mystruct = ... 是指向somestruct 类型的struct 的指针? * 不是取消引用 mystruct 吗?
【问题讨论】:
否。在变量声明中,* 是类型说明符的一部分。
我知道一开始这有点令人困惑,但事实就是如此。如果您发现很难习惯尝试复制一些涉及指针符号的表达式并练习将它们翻译成英文,例如“somestruct pointer my struct equals...”和“mystruct 指向的值是...” .
【讨论】:
*&=
struct somestruct* mystruct; 使 mystruct 成为 TYPE 的变量:struct somestruct*。
因此mystruct 是指向struct somestruct 的指针
这是在mystruct 的声明期间。
使用 mystruct 时:(*mystruct).foo=10; 取消引用 mystruct。
【讨论】:
* 运算符用于引用已经声明的变量时是一个deferencing operator,用于初始化时表示初始化的变量是一个指针
【讨论】:
理解这一点需要您了解指针的基础知识,以及指针的工作原理。总之,您在程序中声明的每个变量都存储在计算机内存中的某个位置,当访问变量时,硬件使用该位置的地址。
因此,指针只是一个变量,它存储另一个变量的内存地址。
somestruct *mystruct = ...
告诉计算机 “嘿,这是 somestruct name mystruct 类型的指针!”。 mystruct 前面的 ' * ' 只是告诉编译器这是一个指针。
这是我们定义指针的标准方式,如果你能理解以下内容,同样的概念也适用于声明结构指针:
char *mychar = ...
double *mydouble = ...
明白了吗?第一行简单地告诉 C 编译器这是一个指向类型 char name *mychar 的指针。猜猜第二行的作用。 :)
【讨论】: