C指针处理(基础)

标签 c pointers

我仍在努力适应指针。不是概念——我理解内存位置、匹配可变长度的指针增量等——这是语法。这是一个我认为是我感到困惑/无法直观把握的原因之一:

int a = 42;

在一个int大小的内存空间中分配并放入42

int *pa = &a;

在内存中分配一个指向包含变量“a”的地址的指针。

printf("%d \n", *pa);

打印 42。

简单/基本。困扰我的是:

int *pa = &a;

似乎表明 *pa&a 相等;等于a的内存地址。但是在:

printf("%d \n", *pa);

*papa指向的地址的内容。所以 *pa 看起来是两种不同的东西(地址或整数),具体取决于上下文。并让我担心“=”!=“=”。

现在我不是要提示/重新定义/质疑语言,我只是想知道是否有人有任何提示可以帮助我更好地理解它,使它更直观。如果您真的懂这门语言,我认为这是完全合乎逻辑的;我希望有人能解释它,所以它对我来说也是合乎逻辑的。

最佳答案

int ** 不同在printf("%d \n", *pa); .

具体来说,int * ,整个东西,基本上是一个类型:一个“指向 int” 类型的指针。

换句话说,int *是一种类型。

但是,调用 *pa表示解引用指针pa .所以,*是一个运算符:遵从运算符。

另外,迂腐一点,=实际上是赋值运算符。

* 的三种一般情况:

  1. 指针类型。 *将遵循一种类型。示例:int *是指向 int 类型的指针。
  2. 解引用运算符。这是一个一元运算符,并取消引用指针以获取内存地址中的“基础值”。
  3. 乘法运算符。这是一个二元运算符

关于C指针处理(基础),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28143775/

相关文章:

c - C中按位运算后的类型转换警告

c - 二维数组引用整个索引,而不是 C 中的单个单元格

c - *ip 的值打印为其指向的变量的地址

c - 数组指针的自动类型转换

arrays - 用指向 C 中结构的指针填充二维指针数组

c - 哪些 Smalltalk 风格支持在方法中编写 C 代码?

c - kvm:模块验证失败:缺少签名和/或所需的 key - 污染内核

c - FUSE缓冲区大小?

c - 从 void* 中获取 float

c++ - 当我将一个指针从 Fortran 传递给 C++ 时,第一个元素的值丢失了