【问题标题】:What does char*** mean in C?char*** 在 C 中是什么意思?
【发布时间】:2019-10-17 14:30:51
【问题描述】:

我需要帮助了解 char*** 的含义以及如何初始化 char*** 类型的变量。

例如,如果有一个函数可以读取文件的行数,同时跟踪行数并打印出每一行对应的数字:

void read_lines(FILE* fp, char*** lines, int* num_lines){}

在这种情况下 char*** 代表什么,我将如何初始化变量行?

【问题讨论】:

  • Read a book first 而不是只在这里问 SO
  • What does ** mean in C++?的可能重复
  • 当心:被指责为Three-star Programmer 并不是恭维。
  • 这通常意味着您需要重新排列或重构代码以提供可以分配的某种类型的返回等。因此不再是三星级程序员。 (也就是说,在某些情况下,指针可能是一个合理的选择,例如需要 poiner-to-pointer-to-type 的地址)在您的情况下,您可以更改您对char **read_lines(FILE* fp, char** lines, int* num_lines){} 的声明并返回一个指向修改后的lines 的指针,以便在调用者中分配回。

标签: c


【解决方案1】:

这是一个指针到指针到指针到char。在这种情况下,它很可能是一个 output 参数。由于 C 按值传递参数,因此输出参数需要额外的 indirection 级别。也就是说,read_lines 函数想要给调用者一个char**,并且要通过一个输出参数来完成它,它需要一个指向char**指针。您可能需要做的就是调用它:

char** lines = null;
int num_lines;
read_lines(fp, &lines, &num_lines);

另见C Programming: malloc() inside another function

【讨论】:

    【解决方案2】:

    我需要帮助来理解 char*** 的含义...

    char*** 类型是一个指针。指向char ** 的指针。 p as pointer to pointer to pointer to char

    char*** p;
    

    ...以及如何初始化 char*** 类型的变量。

    char*** p1 = NULL;  // Initialize p with the null pointer constant.
    
    char *q[] = { "one", "two", "three" };
    char*** p2 = &q;  // Initialize p2 with the address of q
    
    char ***p3 = malloc(sizeof *p3);  // Allocate memory to p3.  Enough for 1 `char **`.
    ....
    free(p3); // free memory when done.
    

    【讨论】:

    • char p3 = malloc(sizeof *p3);...?
    猜你喜欢
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多