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