我仍在努力适应指针。不是概念——我理解内存位置、匹配可变长度的指针增量等——这是语法。这是一个我认为是我感到困惑/无法直观把握的原因之一:
int a = 42;
在一个int大小的内存空间中分配并放入42
int *pa = &a;
在内存中分配一个指向包含变量“a”的地址的指针。
printf("%d \n", *pa);
打印 42。
简单/基本。困扰我的是:
int *pa = &a;
似乎表明 *pa
和 &a
相等;等于a
的内存地址。但是在:
printf("%d \n", *pa);
*pa
是pa
指向的地址的内容。所以 *pa
看起来是两种不同的东西(地址或整数),具体取决于上下文。并让我担心“=”!=“=”。
现在我不是要提示/重新定义/质疑语言,我只是想知道是否有人有任何提示可以帮助我更好地理解它,使它更直观。如果您真的懂这门语言,我认为这是完全合乎逻辑的;我希望有人能解释它,所以它对我来说也是合乎逻辑的。
最佳答案
int *
与 *
不同在printf("%d \n", *pa);
.
具体来说,int *
,整个东西,基本上是一个类型:一个“指向 int
” 类型的指针。
换句话说,int *
是一种类型。
但是,调用 *pa
表示解引用指针pa
.所以,*
是一个运算符:遵从运算符。
另外,迂腐一点,=
实际上是赋值运算符。
*
的三种一般情况:
- 指针类型。
*
将遵循一种类型。示例:int *
是指向 int 类型的指针。 - 解引用运算符。这是一个一元运算符,并取消引用指针以获取内存地址中的“基础值”。
- 乘法运算符。这是一个二元运算符。
关于C指针处理(基础),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28143775/