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是指向数组中第一个元素的指针

这是一个错误的假设。 arr 不是一个指针。它是5个整数的数组。

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

因为它不是arr的字节大小。

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

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

,

要完成答案,您还可以使用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:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...