为何使用sizeof(array)/sizeof(array[0])作为循环条件时,第二个循环无法输出数组?
问题分析与解决
嘿,这个问题的核心出在你定义数组的方式上,咱们一步步捋清楚:
1. 空数组的sizeof计算结果为0
你写的int array[] = {};在C++里会创建一个空数组——也就是没有任何元素的数组。这时候sizeof(array)的结果是0,sizeof(array[0])是int类型的大小(通常是4字节),所以0 / 4的结果还是0。第二个for循环的条件x < 0永远不成立,自然不会执行,也就看不到输出了。
2. 第一个for循环其实是在越界访问内存
虽然你第一个循环能输入5个值,但这属于数组越界访问,是C++里的未定义行为——编译器可能不会报错,但你其实在往不属于这个数组的内存空间里写数据,轻则程序崩溃,重则破坏其他变量的数据,非常危险。
正确的写法
既然你明确要存5个数字,一开始就应该指定数组的大小:
#include <iostream> using namespace std; int main(){ int num; // 直接定义能存5个int的数组 int array[5]; cout << " enter the numbers " << endl; for (int i = 0 ; i < 5 ; i ++ ) cin >> array[i]; // 现在sizeof(array)是5*4=20,除以sizeof(array[0])=4,得到5 num = sizeof(array)/sizeof(array[0]); for ( int x = 0 ; x < num ; x ++) cout << array[x] << endl; }
额外提醒
用sizeof(array)/sizeof(array[0])计算数组元素个数的前提是:数组是在当前作用域中定义的完整数组类型。如果把数组传给函数,数组会退化成指针,这时候sizeof(array)得到的是指针的大小(比如8字节),就没法正确计算元素个数了。
内容的提问来源于stack exchange,提问作者mo7amed
相关产品推荐
相关产品推荐

