如果我这样写,返回结果为1,不明白为什么?预期答案是 5。
int main()
{
const char* list_of_filename[] = {"One","Two","Three","Four","Five"};
printf("%d", countFiles(list_of_filename));
return 0;
}
int countFiles(const char* list_of_filename[])
{
return sizeof(list_of_filename) / sizeof(list_of_filename[0]);
}
最佳答案
数组的
sizeof
仅在声明数组的范围内有效。
const char* list_of_filename[] = {"One","Two","Three","Four","Five"};
printf("%d", sizeof(list_of_filenames) / sizeof(list_of_filenames[0]));
在 C 中,您不能传递数组。所以:
int countFiles(const char* list_of_filename[])
完全一样:
int countFiles(const char **list_of_filename)
因此,您正在比较两个指针的大小。 const char *
和 const char **
的大小在您的系统上是相同的。
这answer (作者 Michael Burr,但最初来自 Chromium)提供了一个执行数组大小计算的宏,以及一些像这样的无效构造的错误(但不是这个)
关于c - 对返回长度为 C 和 C++ 的 char* list[] 的质疑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10022384/