神秘的C函数调用

pam*_*pan 1 c function-call

我有这个代码:

int indexOf(const char *array[], char *e)
{
     printf("inside: %d\n",(int)sizeof(array));
/* ... */
}

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

    const char *a[] = {";", ",", ":", "==", ":="};
    char *b = "==";
    printf("outside: %d\n",(int)sizeof(a));
    int d = indexOf(a,b);
/* ... */
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

outside: 40
inside: 8
Run Code Online (Sandbox Code Playgroud)

为什么输出不一样?有什么帮助吗?

cni*_*tar 9

传递给函数时,数组衰减成指向它的第一个元素.在sizeof从功能产生具体的实现指针的大小.你可以声明它:

int indexOf(const char **array, char *e)
Run Code Online (Sandbox Code Playgroud)

您可能希望将长度作为单独的参数传递.

编辑

我正在尝试避免将大小作为参数传递.

在这种情况下,您可以使用a标记数组的结尾 NULL

const char *a[] = {";", ",", ":", "==", ":=", NULL};
Run Code Online (Sandbox Code Playgroud)

在函数中,您将知道它的结束位置.

  • @ user1015100声明你的函数:`int indexOf(const char**array,char*e,size_t size)`并用它调用它. (3认同)