【问题标题】:c multiple indirection - assigning a char** to an array of char*c 多重间接 - 将 char** 分配给 char* 数组
【发布时间】:2018-03-20 16:32:52
【问题描述】:

char** 是指向char* 的指针。这意味着char** 的值是char* 的地址。 char* 的值是存储在内存中的字符数组中第一个元素的地址。

所以在下面的代码中:

  • char* words[3]; 是一个包含 3 个指向字符数组的指针的数组,也就是 char*
  • char** ppc; 是指向 char* 的指针

我的问题是当wordschar*s 的数组时,如何分配ppc = words

char* words[LENGTH];

int main(int argc, char **argv) {

  char** ppc;

  words[0] = "one";
  words[1] = "two";
  words[2] = "three";

  for (int i =0; i < LENGTH; i++) {
    printf("%s\n", words[i]);
  }

  ppc = words; 

  return 0;

}

【问题讨论】:

  • 老式的衰减到指针
  • 如果在需要指针时使用数组,则数组可以衰减 指向其第一个元素的指针。在您的情况下,当您使用 ppc = words 时,编译器生成的实际上是 ppc = &amp;words[0]
  • 啊谢谢你我应该明白的。
  • 任何 C 指针都可以指向单个项目或项目数组。您的帖子表明您以某种方式认为char * 总是指向一个数组,而char ** 从来没有。这种区分是错误的。任何一个都可以指向一个数组,但都不需要。
  • @TomKarzes,谢谢汤姆,是的,我写的很糟糕。你的意思是char* 可以指向一个charchars 的数组?而char** 可以指向单个char*char**s 的数组。对吗?

标签: c pointers dereference multiple-indirection


【解决方案1】:

在大多数情况下,数组可以衰减到指向数组第一个元素的指针。

在本例中,words 是指向char 的指针数组,即它的类型为char *[]。该数组的一个元素的类型为char *,因此ppc = words&amp;words[0](其类型为char **)分配给ppc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 2011-02-07
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多