C 使用sizeof的数组长度

C 使用sizeof的数组长度,c,sizeof,C,Sizeof,我试图使用sizeof函数确定数组的长度 我的代码如下所示: int n; n = sizeof(a)/sizeof(a[0]); 我一直收到警告说这种类型不一致。我理解这一点,但如何解决问题 错误告诉您a是一个函数参数,sizeof(a)将返回int*的大小,而不是数组的实际大小。这是因为数组类型的函数参数实际上与指针完全相同(因此int[]类型的参数实际上只是int*类型的参数),数组类型中指定的大小只是读取器的信息,而不是编译器实际执行的内容 sizeof(a)/sizeof(a[0])

我试图使用sizeof函数确定数组的长度

我的代码如下所示:

int n;
n = sizeof(a)/sizeof(a[0]);

我一直收到警告说这种类型不一致。我理解这一点,但如何解决问题

错误告诉您
a
是一个函数参数,
sizeof(a)
将返回
int*
的大小,而不是数组的实际大小。这是因为数组类型的函数参数实际上与指针完全相同(因此
int[]
类型的参数实际上只是
int*
类型的参数),数组类型中指定的大小只是读取器的信息,而不是编译器实际执行的内容


sizeof(a)/sizeof(a[0])
技巧实际上只适合宏使用,而不应该用非宏代码编写,因为如果您处于可以静态知道数组长度的上下文中(例如,它不是来自函数参数)然后您应该已经知道它是什么,而不必计算它。

为了避免使用警告类型强制转换,即
(int)(sizeof(a)/sizeof(a[0])

我一直收到警告说这种类型不一致

n
是一个
int
sizeof
的结果类型是
size\u t
,一些无符号类型。
int
的范围通常小于
size\u t
[0…size\u MAX]
。因此有一个关于类型不一致的警告

// Alternative
size_t n;
n = sizeof(a)/sizeof(a[0]);
printf("Element Count: %zu\n", n);

请标记一种编程语言。这是C++吗?你也可以包含确切的错误,警告:数组函数参数“a”的“sieof”将返回“int *[-] Wsizeof数组参数] Print(siZof(a)/siZeof(a(0)))的大小;这是在C编程语言中显示
a
的定义。这是一个数组吗?我知道你最后一段的内容,但是有一个重要的例子,你没有大小,除非使用表达式:
SomeType数组[]={{…},{…},{…},}。数组的大小由初始值设定项的数量决定,唯一确定的方法是通过表达式或使用sentinel值来标记列表的末尾。那么,如何在不使用for的情况下找到输入数组的长度呢loop@user7942759:将数组长度作为一个单独的参数传递。@user7942759您无法找到带有
for
循环的数组的长度,除非数组的最后一个元素具有要检查的唯一值。这可能会抑制警告,但这不是一件好事。表达式最终的计算结果将是
1
2
,这取决于它是32位还是64位体系结构。
// Alternative
size_t n;
n = sizeof(a)/sizeof(a[0]);
printf("Element Count: %zu\n", n);