【问题标题】:What is char ** in C? [duplicate]什么是 C 中的 char **? [复制]
【发布时间】:2012-11-13 00:18:40
【问题描述】:

可能重复:
What is double star?

我对 C 比较陌生,并且遇到过这种说法

typedef char **TreeType

我很清楚 typedef 的作用,但我以前从未见过 char**。我知道 char* 是一个字符数组或类似于字符串。我不确定 char** 是二维字符数组还是指向字符数组的指针。我环顾四周,但找不到它是什么。如果您能解释一下 char** 是什么或指出我正确的方向,我们将不胜感激。

谢谢! :)

【问题讨论】:

标签: c


【解决方案1】:

从技术上讲,char* 不是一个数组,而是一个指向 char 的指针。

同样,char** 是指向 char* 的指针。使其成为指向char 的指针。

C 和 C++ 都在幕后将数组定义为指针类型,所以是的,这个结构很可能是 chars 的数组或字符串数​​组。

【讨论】:

    【解决方案2】:

    它是一个指向指针的指针,所以是的,在某种程度上它是一个二维字符数组。就像char* 可以指示chars 的数组一样,char** 可以指示它指向char*s 的数组。

    【讨论】:

      【解决方案3】:

      嗯,char * 是指向 char 的指针,它不同于 char 数组。

      char amessage[] = "this is an array";  /* define an array*/
      char *pmessage = "this is a pointer"; /* define a pointer*/
      

      并且,char ** 表示指向 char 指针的指针。

      你可以看一些关于指针和数组细节的书籍。

      【讨论】:

      • 在您的示例中,amessage 仍然是一个指针,它指向静态大小的 char 数组的开头。语法<type>* 通常表示一个数组,尽管<type>* 本身就是一个指针。
      • @ktodisco 这个例子来自 K&R。 amessage 是一个数组,刚好足以容纳字符序列和初始化它的\0
      • 如果您查看这两个语句的反汇编,您会发现它们的核心都是指针。我也会推荐你看第二个帖子here
      猜你喜欢
      • 2019-06-10
      • 2016-07-13
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 2011-08-06
      • 2011-06-11
      相关资源
      最近更新 更多