C/C++ 中数组的大小

问题描述 投票:0回答:3

考虑以下代码:

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()
运算符在数组的情况下如何工作?

c++ arrays sizeof
3个回答
4
投票

sizeof(arr)
arr
衰减为指针类型的实例之一。

您可以使用一元加运算符强制指针衰减:

std::size_t/*a better type*/ size = sizeof(+arr);

2
投票

要完成答案,您还可以使用 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

1
投票

arr
是指向数组中第一个元素的指针

这是一个错误的假设。

arr
不是 指针。它是一个由 5 个整数组成的数组。

那么为什么它不在控制台中打印出 4 呢?

因为这不是

arr
的大小(以字节为单位)。

那么这个 sizeof() 运算符在数组的情况下如何工作?

您将获得类型的大小(以字节为单位)。与其他类型相同。

© www.soinside.com 2019 - 2024. All rights reserved.