如何确定C中数组中元素的数量

时间:2014-10-02 16:53:06

标签: c arrays

我是新学习的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]); 

}

 }

3 个答案:

答案 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个元素。