在已初始化、未知大小的数组中使用 sizeof() - C++

NOW*_*OWA 5 c++ arrays types sizeof

我是 C++ 编程新手,我正在尝试获取数组的大小。谁能解释一下为什么会发生这种情况?我尝试在 runnable.com 中运行代码,并显示相同的结果。

我确信这不是正确的方法。如果可能的话,您能建议任何简单的方法来获取此类数组的大小吗?

#include <iostream>

using namespace std;

int main ()
{
  int set1[] = {1, 9, 3, 50, 31, 65};
  int set234[] = {3, 5, 5};

  cout << sizeof(set1) << endl;
  cout << sizeof(set234) << endl;

  cout << "When sizeof() return value is divided by 4"<< endl;
  cout << sizeof(set1) / 4 << endl; 
  cout << sizeof(set234) / 4 << endl;

  return 0;
}

****************************************************************
Output:
24
12
When sizeof() return value is divided by 4
6
3
****************************************************************
Run Code Online (Sandbox Code Playgroud)

**编辑:谢谢您的回复。飞走了:D

Vla*_*cow 4

数组的大小等于其所有元素的大小之和。正如在您的示例中,您处理 int 类型的数组,那么系统中的 sizeof( int ) 似乎等于 4,因此,由于第一个数组有 6 个元素,因此它的大小等于6 * sizeof( int )24。第二个数组的大小等于3 * sizeof( int )12。例如,如果系统中的 sizeof( int ) 等于 8,则第一个数组的大小将等于 48 ( 6 * sizeof* int ) ),第二个数组的大小将等于 24 ( 3 * sizeof( int ) )。

因此,如果您想知道数组中有多少个元素,您可以按以下方式计算

sizeof( YouArray ) / sizeof( YourArray[0] )
Run Code Online (Sandbox Code Playgroud)

或者

sizeof( YouArray ) / sizeof( ElementType )
Run Code Online (Sandbox Code Playgroud)