c ++ sizeof - 需要帮助理解
c++ sizeof - need help understanding
我无法理解一行代码。我看到一个数组被初始化如下:
static const uint SmartBatteryWattHoursTable[1 << 4] = {
0, 14, 27, 41, 54, 68, 86, 104,
120, 150, 180, 210, 240, 270, 300, 330};
但是我看不懂下面的代码是什么意思:
int x = sizeof(SmartBatteryWattHoursTable) / sizeof(*SmartBatteryWattHoursTable));
我知道分子的计算结果是 16 * 4 = 64。但是分母的计算结果是什么?
But what does the denominator evaluate to?
sizeof(*SmartBatteryWattHoursTable)
计算出表达式类型的大小 *SmartBatteryWattHoursTable
。该表达式的类型与数组的元素相同,即 uint
.
换句话说,sizeof(SmartBatteryWattHoursTable) / sizeof(*SmartBatteryWattHoursTable))
是一种以元素数量计算数组大小的方法(与分子的字节数大小相对)。
更简单的写法是std::size(SmartBatteryWattHoursTable)
。
代码正在声明一个包含 16 (1 << 4
) uint
个值的数组。
声明sizeof(SmartBatteryWattHoursTable)
returns整个数组的字节大小,因此sizeof(uint) * 16 = 64
(假设是4字节uint
)。
数组 decays 指向第一个元素的指针,因此 *SmartBatteryWattHoursTable
与 *(&SmartBatteryWattHoursTable[0])
相同。所以语句 sizeof(*SmartBatteryWattHoursTable)
returns 数组第一个元素的字节大小,即单个 uint
,因此 4
.
这样,x
就设置为64 / 4 = 16
,即数组的元素个数。
这是在 C++17 中将 std::size()
添加到标准 C++ 库(以及 C 中的 std::ssize()
之前,获取固定数组元素大小的一种非常常用的方法++20).
我无法理解一行代码。我看到一个数组被初始化如下:
static const uint SmartBatteryWattHoursTable[1 << 4] = {
0, 14, 27, 41, 54, 68, 86, 104,
120, 150, 180, 210, 240, 270, 300, 330};
但是我看不懂下面的代码是什么意思:
int x = sizeof(SmartBatteryWattHoursTable) / sizeof(*SmartBatteryWattHoursTable));
我知道分子的计算结果是 16 * 4 = 64。但是分母的计算结果是什么?
But what does the denominator evaluate to?
sizeof(*SmartBatteryWattHoursTable)
计算出表达式类型的大小 *SmartBatteryWattHoursTable
。该表达式的类型与数组的元素相同,即 uint
.
换句话说,sizeof(SmartBatteryWattHoursTable) / sizeof(*SmartBatteryWattHoursTable))
是一种以元素数量计算数组大小的方法(与分子的字节数大小相对)。
更简单的写法是std::size(SmartBatteryWattHoursTable)
。
代码正在声明一个包含 16 (1 << 4
) uint
个值的数组。
声明sizeof(SmartBatteryWattHoursTable)
returns整个数组的字节大小,因此sizeof(uint) * 16 = 64
(假设是4字节uint
)。
数组 decays 指向第一个元素的指针,因此 *SmartBatteryWattHoursTable
与 *(&SmartBatteryWattHoursTable[0])
相同。所以语句 sizeof(*SmartBatteryWattHoursTable)
returns 数组第一个元素的字节大小,即单个 uint
,因此 4
.
这样,x
就设置为64 / 4 = 16
,即数组的元素个数。
这是在 C++17 中将 std::size()
添加到标准 C++ 库(以及 C 中的 std::ssize()
之前,获取固定数组元素大小的一种非常常用的方法++20).