我有这段代码:
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
为什么输出不一样?有什么帮助吗?
答案 0 :(得分:9)
当传递给函数时,数组衰减成指向它的第一个元素。函数中的sizeof
会产生实现上指针的大小。你可以宣布它:
int indexOf(const char **array, char *e)
您可能希望将长度作为单独的参数传递。
我正在尝试避免将大小作为参数传递。
在这种情况下,您可以使用NULL
const char *a[] = {";", ",", ":", "==", ":=", NULL};
在功能中你会知道它的结束位置。