c - 为什么我不能将指向 char 缓冲区的指针传递给带有参数 char** 的函数

标签 c pointers

如果我有一个函数:

void myfunction(char** s);

然后我可以像这样传递一个 char*:

char* s = malloc(100);
myfunction(&s);

但是我的编译器不允许我这样做:

char s[100] = {0};
myfunction(&s);

我认为编译器应该允许指向缓冲区的指针。

最佳答案

您的函数需要一个指向指针 (char **) 的指针。您试图将指针传递给 array 而不是 (char (*)[100])。你为什么期望这是“编译器允许的”?数组不是指针。数组和指针是性质完全不同的对象。指向指针的指针与指向数组的指针不兼容。您不能互换使用它们。

如果您希望将基于数组的缓冲区与需要 char ** 的函数一起使用,则必须首先显式创建指向该缓冲区的指针

char s[100] = {0};
char *ps = s;

然后像之前一样将指针传递给该指针

myfunction(&ps);

关于c - 为什么我不能将指向 char 缓冲区的指针传递给带有参数 char** 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12124394/

相关文章:

c - STM32 USB CDC 长包接收

c - 从 C 向 GenServer 发送消息

c - 如何获取从索引a到索引b的数组的最大元素?

C语言: Convert Pointer to String,我要返回什么?

c - 函数调用期间指针到指针不起作用?

c - 如何在 c 中分配指向数组 [ ] 的指针?

c - C中的最大小数位数

c++ - 链接 ArrayList 实现

c - 如何编写在C中传递给Variadic函数的变量

C++ 返回指向动态分配数组的指针