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

Ang*_*ber 4 c pointers

如果我有一个功能:

void myfunction(char** s);
Run Code Online (Sandbox Code Playgroud)

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

char* s = malloc(100);
myfunction(&s);
Run Code Online (Sandbox Code Playgroud)

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

char s[100] = {0};
myfunction(&s);
Run Code Online (Sandbox Code Playgroud)

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

AnT*_*AnT 5

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

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

char s[100] = {0};
char *ps = s;
Run Code Online (Sandbox Code Playgroud)

然后像之前一样传递一个指向该指针的指针

myfunction(&ps);
Run Code Online (Sandbox Code Playgroud)

  • @Seçkin Savaşçı:没错。数组不是指针。(为什么这种混淆如此持久?关于这个问题有成千上万的解释,甚至没有提到网络上的许多常见问题解答)http://c-faq.com/aryptr/index.html (4认同)