考虑以下代码:
int main(){
int arr[] = {1,2,3,7,8};
int size = sizeof(arr);
cout << size;
}
我知道上面的代码将打印数组的大小,即 4*5 = 20 字节,但我对此有一个小疑问,
arr
是指向数组中第一个元素的指针和 ptr 的大小变量是 4 个字节,为什么它不在控制台中打印出 4?
即使我们取消引用
arr
并打印它,数组中的第一个元素也会被打印。
cout << *arr;
那么这个
sizeof()
运算符在数组的情况下如何工作?
sizeof(arr)
是 arr
不 衰减为指针类型的实例之一。
您可以使用一元加运算符强制指针衰减:
std::size_t/*a better type*/ size = sizeof(+arr);
要完成答案,您还可以使用 C++11 的 std::extent
获取元素数量在我的机器上:
#include <iostream>
#include <type_traits>
int main()
{
int arr[] = {1,2,3,7,8};
std::cout << sizeof(arr) << "\n";
std::cout << sizeof(+arr) << "\n";
std::cout << std::extent<decltype(arr)>::value << "\n";
}
打印:
20
8
5
来自@eerorika 评论:
如果您使用 C++17,您还可以使用 std::size
std::cout << std::size(arr); // prints 5
是指向数组中第一个元素的指针arr
这是一个错误的假设。
arr
不是 指针。它是一个由 5 个整数组成的数组。
那么为什么它不在控制台中打印出 4 呢?
因为这不是
arr
的大小(以字节为单位)。
那么这个 sizeof() 运算符在数组的情况下如何工作?
您将获得类型的大小(以字节为单位)。与其他类型相同。