【问题标题】:Why isn't a function to find number of elements of array not working(C++)为什么不是查找数组元素数量的函数不起作用(C++)
【发布时间】:2021-06-11 12:09:22
【问题描述】:

我是一名 C++ 初学者,最近发现制作自己的函数和库。所以我想我会把图书馆作为一个项目。我在其中实现了一个函数,它返回数组中元素的数量。但正如我在大多数网站上发现的那样,并根据我自己的理解,使用“sizeof(array) / sizeof(array[0]);”工作......但不适合我。我有一个包含 5 个元素的数组,编译器给出输出“1”。以下是两个文件的代码:

Main.cxx:

    #include <iostream>
    #include "SML"

    using namespace std;

    int main() {

          int arr[] = {10, 20, 30, 40, 50};

          cout << Int.countof(arr) << endl;
   
          return 0;   

    }

SML(标题):

    // SMLlib:
    // Simple Math Library for C++
    // Created by Saadat Khurshid

    // integer functions
    class Int {

    public:

        // int array count
        int countof(int arr[]) {    
            int count = sizeof(arr) / sizeof(arr[0]);
            return count;
        }
    }; 
    
    // Making object of Int class
    Int Int;

注意:我正在使用基于 clang 的 Cxxdroid android 编译器。在 PC IDE 上运行的所有功能都适用于它(当然除了一些仅限 Windows 的库)。

【问题讨论】:

  • 不是或不是,无论如何,这是对观察到的症状的极其模糊和糟糕的描述。
  • 这能回答你的问题吗? C sizeof a passed array
  • @Yksisarvinen 在正常情况下这是一个很好的副本,但是 op 函数是查找数组的大小,所有答案都指向一个简单的解决方案,即传递大小作为参数,即不会是一个非常有用的功能。

标签: c++ arrays function file header


【解决方案1】:

"sizeof(array) / sizeof(array[0]);" 有效...但不适用于我。

这是因为当你将数组作为函数的参数传递时,它会衰减为指向数组第一个元素的指针,sizeof(arr) 会给你指针的大小,而不是数组的大小。

当它在声明数组的同一范围内使用时有效。在您声明数组的主函数中尝试它,您会发现它有效。

在任何情况下,您都应该简单地使用 C++ containers library 中提供的容器之一,这样可以节省您的时间和耐心。似乎std::arraystd::vector 是您需要的,其中任何一个都已经有一个保持自己大小的成员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2021-11-18
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多