gpt4 book ai didi

C指针处理(基础)

转载 作者:太空宇宙 更新时间:2023-11-04 05:18:05 30 4
gpt4 key购买 nike

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

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com