【发布时间】:2020-07-10 15:10:55
【问题描述】:
我不止一次看到数组索引 0 上使用的 sizeof 运算符在存储数组元素的数量时充当分母。我的问题是为什么使用 sizeof 运算符而不是只除以 1 或根本不除?
在下面来自https://www.bravegnu.org/gnu-eprog/c-startup.html 的一些示例代码中查看此现象的示例。
static int arr[] = { 1, 10, 4, 5, 6, 7 };
static int sum;
static const int n = sizeof(arr) / sizeof(arr[0]); //RIGHT HERE!!!!!
int main()
{
int i;
for (i = 0; i < n; i++)
sum += arr[i];
}
【问题讨论】:
-
你了解
sizeof运算符返回的内容吗?如果不除以数组元素的大小,则不会得到数组的长度 -
如果数组的元素大小 > 1,为什么建议不要除法?数组的元素显然少于或等于字节。
-
常见于代码:
#define COUNTOF(arr) ( sizeof(arr) / sizeof((arr)[0]) ) -
不是很相关,但
sizeof是一个运算符(一个单一的),而不是一个函数。这种区别在某些情况下具有一些重要意义。 -
@EugeneSh。我想说
sizeof()是一个运算符而不是一个函数与这个问题有关。运算符可用于全局变量初始化,例如此问题中的static const int n = ...。不能在那里调用可执行函数。