神秘的C函数调用

时间:2011-10-26 17:35:15

标签: 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);
/* ... */
}

这是输出:

outside: 40
inside: 8

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

1 个答案:

答案 0 :(得分:9)

当传递给函数时,数组衰减成指向它的第一个元素。函数中的sizeof会产生实现上指针的大小。你可以宣布它:

int indexOf(const char **array, char *e)

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

修改

  

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

在这种情况下,您可以使用NULL

标记数组的结尾
const char *a[] = {";", ",", ":", "==", ":=", NULL};

在功能中你会知道它的结束位置。