某天遍历数组时想通过sizeof() 来动态获取数组长度,但是一直不能得到正确的值,就专门查看了下输出值
int *arr,*ar, capacity = 0;
int arrr[5] = { 1,1,1,1,1 };
cin >> capacity;
arr = new int[capacity + 1];
cout << "capacity : " << capacity << endl;
cout << "ar : " << sizeof(ar)/sizeof(int) << endl;
cout << "arr : " << sizeof(arr) << endl;
cout << "arrr : " << sizeof(arrr) << endl;
运行以上代码,得到如下的输出
由输出可知sizeof() 只能输出变量所占空间的大小,*int类型的数据占4个字节,int[n]则占用*int×n个字符(4×n)。使用int arr[n]定义的数组可以直接得到数组长度、使用int* 定义的数组在new时也会给出长度。故在C++中遍历数组是的标值一般都可以直接得到。
ps 这篇博客详细的介绍了C++中关于strlen()、sizeof()、size()以及.length()之间的区别,需要详细了解的博友可以去看看:c/c++中sizeof()、strlen()、length()、size()详解和区别文章来自博主z_qifa。