C/C++ 中的数组大小
Size of array in C/C++
考虑以下代码:
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);
arr
is a pointer to the first element in the array
这是一个错误的假设。 arr
是 不是 指针。它是一个包含 5 个整数的数组。
so why it does not print out 4 in the console?
因为这不是 arr
字节的大小。
So how does this sizeof() operator work in case of arrays??
您将获得类型的大小(以字节为单位)。与所有其他类型相同。
要完成答案,您还可以使用 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
考虑以下代码:
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);
arr
is a pointer to the first element in the array
这是一个错误的假设。 arr
是 不是 指针。它是一个包含 5 个整数的数组。
so why it does not print out 4 in the console?
因为这不是 arr
字节的大小。
So how does this sizeof() operator work in case of arrays??
您将获得类型的大小(以字节为单位)。与所有其他类型相同。
要完成答案,您还可以使用 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