当我在 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
请注意,如果将数组传递给函数,上述方法将不起作用,因为数组衰减为指针,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()
关于c++ - sizeof(arr)/sizeof(arr[0]) 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33523585/