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

如何在C中确定数组中的元素数,c,arrays,C,Arrays,我是学C语言的新手 例如,我想知道数组中的元素数 int MyArray[80] = {50, 845, 584}; n = sizeof(MyArray)/sizeof(MyArray[0]); // This will give me 80. 但是我只想要{}内部的元素数量,因为我在上面初始化了它,它有3个元素(50845584),那么我如何通过代码来计算它们呢 另一个问题: 如何创建一个空数组,以便自己添加元素并使用for循环打印所有元素,我已经尝试了以下方法: int i; int M

我是学C语言的新手

例如,我想知道数组中的元素数

int MyArray[80] = {50, 845, 584};
n = sizeof(MyArray)/sizeof(MyArray[0]); // This will give me 80.
但是我只想要{}内部的元素数量,因为我在上面初始化了它,它有3个元素(50845584),那么我如何通过代码来计算它们呢

另一个问题:

如何创建一个空数组,以便自己添加元素并使用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]);

}
inti;
int MyArray[80]={};
MyArray[0]=50;
MyArray[1]=584;
MyArray[2]=784;

对于(i=0;i如果初始化的数组的元素少于声明保留的数组,则剩余的元素将默认初始化。对于整数,这意味着它们将被置零

假设初始化列表中没有零,那么可以通过检查数组中的第一个零(直到数组的长度)来检查初始化列表的长度

或者,如果数组大小应为常量,则应将大小指定为
[]
,这将使其与初始化列表一样长,不再重复

我只想要{}内的元素数

试一试


使用预处理器的丑陋方式:

#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;
}
输出:

3

请注意,此版本仅限于初始值设定项中的
N
元素。

很抱歉,但您需要记住自己,使用变量。除非您维护一个变量以了解上次使用的元素,否则您不能使用变量。然而,我通过执行另一篇文章中的以下代码来修复此问题:#include#define NUM_ELEMS(a)(sizeof(a)/sizeof 0[a])main()第二,你不需要。如果你不需要全部80个元素,就不要指定大小。如果你确实需要全部80个元素,当
sizeof()
告诉你“值80个整数”时,你不能抱怨。请不要一下子问几个问题。太宽了。反正是颠倒过来的。
#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