c - 对返回长度为 C 和 C++ 的 char* list[] 的质疑

标签 c visual-c++

如果我这样写,返回结果为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/

相关文章:

c - C中的许多包装函数

model-view-controller - 字符到 LPCTSTR

c++ - CString 用于静态方法

c++ - 引用在依赖应用程序中声明的库中的变量

C 循环跳转到链表开头

c - 使用 Visual Studio 确定堆栈空间

c - 如何删除数组的第一个元素,并在末尾添加一个新元素?

c程序打印look and say序列

c++ - fscanf/fscanf_s 行为差异

c# - Visual C++ vs Visual C#,哪个最好学?