0 c
int array[] = {23,34,12,17,204,99,16};
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
printf("%d",sizeof(TOTAL_ELEMENTS));
Run Code Online (Sandbox Code Playgroud)
这是我的一些示例代码.数组是整数类型.所以,这array[0]也是一个整数.整数除以整数应该产生一个整数.但是,当我尝试TOTAL_ELEMENTS使用sizeof()运算符查找大小时,它显示8个字节.为什么??
您对宏的使用扩展到类似的东西sizeof (sizeof ....).由于结果sizeof是a size_t,你得到的sizeof (size_t),在你的平台上显然是8.
你可能想要
printf("%zu\n", TOTAL_ELEMENTS);
Run Code Online (Sandbox Code Playgroud)
(注意,这%d是一个错误的转换说明符size_t,一个好的编译器至少会警告你的版本.)
这是一个完整的程序:
#include <stdio.h>
int main()
{
int array[] = {23,34,12,17,204,99,16};
size_t const TOTAL_ELEMENTS = (sizeof array) / (sizeof array[0]);
printf("%zu\n", TOTAL_ELEMENTS);
}
Run Code Online (Sandbox Code Playgroud)
输出:
7
Run Code Online (Sandbox Code Playgroud)
请注意,我TOTAL_ELEMENTS是一个普通的对象,因为这里不需要它是一个宏.如果您想要一个替换数组名称的版本,您可能需要它作为宏,如下所示:
#define TOTAL_ELEMENTS(a) (sizeof (a) / sizeof (a)[0])
Run Code Online (Sandbox Code Playgroud)
然后你写:
printf("%zu\n", TOTAL_ELEMENTS(array));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1626 次 |
| 最近记录: |