hengzi 发表于 2024-4-19 19:02:59

C语言指针的问题基础

就是C语言中 指针的那种输出 ** 和*有什么区别 在《带你学C,带你飞》的时候没看到解释

FishC 发表于 2024-4-19 19:03:18

在C语言中,指针是一个非常重要的概念。指针表示一个变量或对象在内存中的地址。利用指针,我们可以直接访问或修改内存中的数据。

现在来解释一下`**`和`*`之间的区别:

`*`是用于声明指针变量时放在类型前面的符号,表示这个变量是一个指针。例如,`int *ptr;`声明了一个名为`ptr`的指向整数的指针变量。

当我们需要访问指针所指向的值时,我们使用`*`运算符。例如,`*ptr`表示取出`ptr`指针所指向的整数值。

接下来是`**`,这是用于声明指向指针的指针变量时放在类型前面的符号。例如,`int **pptr;`声明了一个名为`pptr`的指向指针的指针变量。

使用`**`的场景比较少见。通常情况下,我们可以使用单个指针就可以完成需要的任务。但是如果你需要操作指向指针的指针,那么可以使用`**`。

希望这能帮助你理解`**`和`*`的区别。如果你对指针还有其他问题,请随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-4-19 21:34:08

本帖最后由 jackz007 于 2024-4-20 00:12 编辑

      指针是一种特殊的整型数,用于指示变量在内存中的储存位置,其数值是内存地址的编码,其性质与仓库中货架挡位的编码相似,是为了迅速找到储存的货物而存在。
      之所以说指针是一种特殊的整型数,是因为这种变量所占据的内存空间取决于 CPU 的字长,对于 32 位程序而言,指针一律为固定的 32 位,每个指针占用的是 4 个字节,其类型等同于 unsigned int,对于 64 位程序而言,指针一律为固定的 64 位,每个指针占用的是 8 个字节,其类型等同于 unsigned long long。

      建议考察、运行下面的代码,通过对照源代码以及对应的屏显信息以加深对于指针的理解
#include <stdio.h>

int main(void)
{
      int k , * p , ** q         ;
      k = 1234                     ;
      p = & k                      ; // p 指向变量 k,p 所指向的内存中存放的是整数 k 的数值
      q = & p                      ; // q 指向指针 p,q 所指向的内存中存放的是指针 p 的数值
      printf("   k = %d\n" , k)    ;
      printf(" * p = %d\n" , * p); // * p是整型数,用 %d 显示其数值
      printf("** q = %d\n" , ** q) ; // ** q 是整型数,用 %d 显示其数值
      printf("   p = %p\n" , p)    ; // p 是指针,用 %p 显示指针地址(变量 p 的数值,十六进制形式)
      printf("   q = %p\n" , q)    ; // q 是指针,用 %p 显示指针地址(变量 q 的数值,十六进制形式)
      printf(" * q = %p\n" , * q); // * q 是指针,用 %p 显示指针地址(变量 * q 的数值,十六进制形式)
}
      编译、运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
   k = 1234
* p = 1234
** q = 1234
   p = 0105faf8   【注意】:p 是一个指针
   q = 0105faf4   【注意】:q 是另一个指针
* q = 0105faf8    【注意】:* q 就是指针 p

D:\\C>
页: [1]
查看完整版本: C语言指针的问题基础