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

标签 c++ sizeof

当我在 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/

相关文章:

c++ - 创建一个 Fast Sin() 函数来提高 fps ?快速 sin() 函数?

c - C 中 sizeof 运算符中的参数

java - 如何根据字节减少 Java List 对象的大小

c - 查找输入 char* 的大小并将部分复制到输出 char* C

c++ - 我的错误,还是英特尔编译器中的错误? sizeof 非静态成员错误

c++ - std::unique_ptr 和指向指针的指针

c++ - 为什么没有 unique_ptr::operator*() 的安全替代方案?

c++ - 带变量的 SQL 查询

c++ - 编译器错误 : "Non-aggregates cannot be initialized with initializer list."

c - 为什么 sizeof(int) == sizeof(long)?