gpt4 book ai didi

c++ - sizeof(arr)/sizeof(arr[0]) 是如何工作的?

转载 作者:IT老高 更新时间:2023-10-28 21:38:23 26 4
gpt4 key购买 nike

当我在 for 循环中寻找数组的大小时,我看到人们写过

int arr[10];
for(int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){}

sizeof(arr)/sizeof(arr[0]) 数组的长度如何?它在技术上是如何工作的?

最佳答案

如果你有一个 array 然后 sizeof(array) 返回数组占用的字节数。由于每个元素可能占用超过 1 个字节的空间,因此您必须将结果除以一个元素的大小 (sizeof(array[0]))。这为您提供了数组中的元素数量。

例子:

std::uint32_t array[10];

auto sizeOfInt = sizeof(std::uint32_t); // 4
auto numOfBytes = sizeof(array); // 10*sizeOfInt = 40
auto sizeOfElement = sizeof(array[0]); // sizeOfInt = 4
auto numOfElements = sizeof(array) / sizeof(array[0]); // numOfBytes / sizeOfElement = 40 / 4 = 10

LIVE EXAMPLE

请注意,如果将数组传递给函数,上述方法将不起作用,因为数组衰减为指针,sizeof(array) 返回指针的大小。

std::size_t function(std::uint32_t a[]) // same for void function(std::uint32_t a[10])
{
return sizeof(a); // sizeof(std::uint32_t*)!
}

std::uint32_t array[10];
auto sizeOfArray = function(array); // array decays to a pointer inside function()

LIVE EXAMPLE #2

关于c++ - sizeof(arr)/sizeof(arr[0]) 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33523585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com