我是新学习的C Languange。
我想知道数组中元素的数量,例如
int MyArray[80] = {50, 845, 584};
n = sizeof(MyArray)/sizeof(MyArray[0]); // This will give me 80.
但我只想要{}内部的元素数量,因为我在上面初始化它有3个元素(50,845,584),所以我如何按代码计算它们?
另一个问题:
如何创建一个空数组,以便我可以自己添加元素并使用for循环打印所有元素,我试过这个:
int i;
int MyArray[80] = {};
MyArray[0] = 50;
MyArray[1] = 584;
MyArray[2] = 784;
for(i=0; i<=sizeof(MyArray); i++){
printf("Array Element[%d] is: %d", i, MyArray[i]);
}
但这似乎没有用,有什么帮助吗?感谢
编辑:我通过在另一篇文章中找到以下代码来修复它:
#include <stdio.h>
#define NUM_ELEMS(a) (sizeof(a)/sizeof 0[a])
main() { int i; int numbers[] = {2, 3, 5, 7, 11, 13, 17, 19, 85};
int AllElements = NUM_ELEMS(numbers);
for(i=0; i<AllElements; i++){
printf("Element[%d] in array is: %d \n", i, numbers[i]);
}
}
答案 0 :(得分:4)
如果初始化一个数组的元素少于声明要保存的数组,则剩余的元素将被默认初始化。对于整数,这意味着它们将被归零。
假设初始化列表中没有零,那么,您可以通过检查数组中的第一个零(直到数组的长度)来检查初始化列表的长度。
或者,如果数组大小应该只是常量,那么您应该将大小指定为[]
,这使得它与初始化列表完全一样长,而不再是。
答案 1 :(得分:1)
我只想要{}
中的元素数量
尝试
size_t n = sizeof (int[]){50, 845, 584} / sizeof (int);
答案 2 :(得分:0)
使用预处理器的一种丑陋方式:
#include <stdio.h>
#define NARGS_SEQ(_1,_2,_3,_4,_5,_6,_7,_8,N,...) N
#define NARGS(...) NARGS_SEQ(__VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1)
#define init_array(arr, ...) NARGS(__VA_ARGS__); arr = {__VA_ARGS__}
int main(void)
{
int n = init_array(int my_array[80], 50, 845, 584);
printf("%d\n", n);
return 0;
}
扩展为:
int main(void)
{
int n = 3; int my_array[80] = {50, 845, 584};
printf("%d\n", n);
return 0;
}
输出:
3
请注意,此版本仅限于初始化程序中的N
个元素。