C++数组长度如何获取 sizeof计算元素个数

老实说,当谈到C++中的数组长度时,它取决于分数。

1 .老方法:使用sizeof 这个技巧虽然有些欺骗性,但使用起来也有陷阱。
例如,如果您有一个常规数组: 程序文件 int arr[] = {1 , 2 , 3 , 4 , 5 };
目前使用sizeof(arr)获取的是整个数组占用的字节数,sizeof(arr[0])获取的是某个元素的字节数。
因此数组的长度等于这两个数字相除: 程序文件 int length = sizeof(arr) / sizeof(arr[0]);
据此,假设int为4 个字节,则长度为2 0/4 =5 这个技巧效果很好,但前提是数组的大小必须在编译时确定,而不是在运行时确定。

2 注意:这一步有雷区。
1 . 当数组传递给函数时,它就变成了指针: 程序文件 无效函数(int arr []){ int len = sizeof(arr) / sizeof(arr[0]); // 目前arr是指针,len计算错误 }
如果传递数组名,它将退化为指针。
sizeof使用指针来计数,这肯定是错误的。

2 动态分配的数组也不起作用: 程序文件 intdynamicArr = new int[1 0]; int len ​= sizeof(dynamicArr) / sizeof(dynamicArr[0]); // 也是错误的
动态数组名也是指针,sizeof计算的还是指针的大小,和数组有多少个元素无关。

3 新方法:使用标准库 现代 C++ 建议使用这些亲戚:
1 std::array(自 C++1 1 起可用): 程序文件 包括在内 std::array arr = {1 , 2 , 3 , 4 , 5 }; auto len = arr.size(); // len 直接 5
这个东西的大小是硬编码的,但是使用 .size() 方法获取长度是非常容易的。

2 std::向量(动态数组): 程序文件 包括<向量> std::vector vec = {1 , 2 , 3 , 4 , 5 }; 自动长度= vec.size(); // len也是5
这个东西的大小是可变的。
使用.size()来获取长度,这很容易。

3 std::size() (从 C++1 7 开始): 程序文件 包括在内 包括<向量> 包括
int main() { int arr[] = {1 , 2 , 3 , 4 , 5 }; std::array stdArr = {1 , 2 , 3 , 4 , 5 }; std::vector vec = {1 , 2 , 3 , 4 , 5 }; std::cout << std>无论你是常规数组、std::array还是std::vector,都可以直接使用std::size()来获取长度,非常统一。

4 总结 使用sizeof是可以的,但是你要注意它的陷阱:当数组名传入函数时,它就变成了指针,动态分配无法得到正确的结果。
现在,在编写代码时,更喜欢 std::array 或 std::vector,并使用 .size() 来获取长度。
C++1 7 之后直接使用std::size()就可以了,安全且易读。

C++数组大小计算方法解析

是的,计算C++数组大小取决于具体情况。
如果直接对静态数组使用sizeof,函数参数就会有麻烦。

静态数组:sizeof(数组名)/sizeof(元素类型)的个数。
例如:int arr[5 ],sizeof(arr)/sizeof(arr[0])为5
函数参数数组:sizeof(arr)计算指针大小,不可靠。
它必须与附加参数或通过引用传递。

现代 C++ 建议使用 std::array 或 std::vector,为了方便起见,它们附带 .size() 。
C++1 7 的 std::size() 也相当不错。

原始数组是有限的,现代C++非常强大。
记住使用现代方法,不要坚持旧方法。

数组大小是什么

数组的大小是元素的数量。
例如,int arr[1 0];尺寸为 X 下标应从 0 开始。
过程步骤在函数内部定义,并在函数结束时消失。
所有服装都是在所有功能之外定义的。
模块是模块内的步骤。
赌场元素与赌场类型之间的区别。
例如,int arr[2 ] = {1 , "abc"};罕见但可行。

数组大小是什么

嘿嘿,你说的好像太官方了。
我会告诉你我后来进入的陷阱。

当时我刚刚学编程,老师在讲衣服,这对我来说似乎很简单。
数组的大小就是它需要多少个数字。
为此,有一次,我写了一个程序并定义了一个顺序,因为我会在其中放入更多信息。
我不记得具体数字了。
不管怎样,我盲目地决定,写了1 00。
在哪里?之后,程序崩溃并卡住。
经过检查,发现我定义的数组太宽,超出了内存限制。
从军队的规模就可以看出这一点。
我当时真的很困惑,不知道为什么会出现这样的情况。

后来我明白了,订购的数量要根据实际需要来确定。
你不能随意定义它,你知道你有多想要一个给定的集合。
例如,如果要处理用户输入,最好先询问用户要输入多少数据,然后根据这个数字定义数组大小。
今年我负责我县的订单处理系统。
用户一次最多可以放置 2 0 行,因此我将数量设置为 2 0 个元素,这样就不会出现问题。

后来,他遇到了一个组织承保的问题。
记得有一次,我写了一个循环从数组中获取数据,但是它越界了,返回了一个不存在的元素,程序又崩溃了。
你看,这是通过不关注有组织的订阅来实现的。
后来了解到,放置元素数组时,下标必须从0开始,数组的大小不能超过1 比如2 0个元素的数组,下标范围是0到1 9 ,不能取第2 0个元素。

所以你看,实际编程中数组大小、订阅经验等问题都是需要逐步积累经验的。
你不能只听老师说的话,你必须努力找出漏洞在哪里。