C中数组的元素计数

新手上路,请多包涵

假设我有一个数组 arr 。以下何时不会给出数组元素的数量: sizeof(arr) / sizeof(arr[0])

我只能处理一种情况:数组包含属于数组类型的不同派生类型的元素。

我是对的吗,是否存在(我几乎肯定 肯定 存在)其他此类情况?

很抱歉这个琐碎的问题,我是一名 Java 开发人员,而且我对 C++ 还很陌生。

谢谢!

原文由 Albus Dumbledore 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 336
2 个回答

假设我有一个数组 arr。以下什么时候不会给出数组元素的数量:sizeof(arr) / sizeof(arr[0])?

我经常看到新程序员这样做的一件事:

 void f(Sample *arr)
{
   int count = sizeof(arr)/sizeof(arr[0]); //what would be count? 10?
}

Sample arr[10];
f(arr);

所以新程序员认为 count 的值是 10。但这是错误的。

即使这是错误的:

 void g(Sample arr[]) //even more deceptive form!
{
   int count = sizeof(arr)/sizeof(arr[0]); //count would not be 10
}

这都是因为一旦将数组传递给这些函数中的任何一个,它就会变成 指针 类型,因此 sizeof(arr) 会给出 指针 的大小,而不是数组!


编辑:

以下是一种优雅的方式,您可以将数组传递给函数,而不会让它衰减为指针类型:

 template<size_t N>
void h(Sample (&arr)[N])
{
    size_t count = N; //N is 10, so would be count!
    //you can even do this now:
    //size_t count = sizeof(arr)/sizeof(arr[0]);  it'll return 10!
}
Sample arr[10];
h(arr); //pass : same as before!

原文由 Nawaz 发布,翻译遵循 CC BY-SA 3.0 许可协议

确定数组中有多少个数字。

 #include<bits/stdc++.h>
using namespace std;
int main()
{
    int n[10]  ;

    int l = sizeof(n)/sizeof(n[0]);

    cout << l;

    return 0;
}

原文由 AL MaMun 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题