C语言,求数组中已有元素个数?

请问如何计算出数组中已有元素个数,得到一个n。 比如我先定义一个结构体中数组a[20],我在一个函数里输入五个学生信息,那么如何定义一个n,计算得到n=5,然后可以在另一个函数里实现其他功能时循环可以用上?

在数组的外围结构体里面定义一个成员,用来记录数组中有效数据成员的数量,当有数据存入时 ,计数加1。

#define INIT_ARRAY_NUM 50
typedef struct inner_t {
    int a;
    int b;
    int c;
...
} inner;

typedef struct outer_t {
    int inner_num;    /* number items of inner are recorded */
    inner in_a[INIT_ARRAY_NUM];
...
} outer;

你如果不定义某个规则的话,对于一个你不知道实际有多少个有效数据的整型数据,没有办法知道其有效长度 比如字符数组,明确用'\0'表示其结尾,所以能够计算出长度,找到'\0'位置就可以了。但整型数组没有这个规则啊。除非你自定义,比如0xFFFFFFFF表示无效值,那么也可以参考字符数组的方式进行长度计算

用算法

int a[]; for () { ... ; } n=sizeof(a[]);

申请变量的时候不要指定数组大小,试试

没有好的办法,只能在输入数据的时候记录输入了多个元素。
当然,如果数组里面是对象指针,而且已经把数组的元素初始化为0,那么可以通过判断元素是否等于0来获取元素的个数。
如果不是指针,那么可以让数组中的元素等于某个特定的值来判断该元素是否是最后一个元素。

采用结构体方式,可以参考如下代码:

#include <stdio.h>
#include <stdlib.h>
//定义成结构体或者类都可以,结构体本身是一种特殊的类
struct DataManager 
{
    int* a;   //数据指针,用来保存数组(假设是int类型的)
    int nmb;  //保存数组中实际元素的个数
    int size; //当前开辟的空间大小

    DataManager(){a = 0;nmb = 0;size = 0;}
    //添加一个元素(添加到最后)
    void add(int v)
    {
        if(size == 0)
            size = 10;
        else if(nmb >= size)
            size = size * 2;//大小翻倍
        
        a = (int*)realloc(a,size*sizeof(int)); //重新开辟一块内存空间
        a[nmb++] = v;
    }
    //释放空间
    void release()
    {
        if(a)
            free(a);
    }
};

如果是字符数组,可以使用 strlen(数组名) 来获取长度。需要包含头文件#include。如果是字符串,可以使用 字符串名.length() 来获取长度。需要包含头文件#include。如果是其他的,那只能一个一个便历了。

typdef struct Student
{
int a;int b;
} Stu;
Stu* stuAry[20];
int stuCount=0;
int Add(Stu* t_stu)
{
stuAry[stuCount]=t_stu;
stuCount++;
return stuCount;
}
int Del(Stu* t_stu)
{
//查找删除 //移动
stuCount--;
return stuCount;
}
int DelLast()
{
stuCount--;
stuAry[stuCount]=null;
return stuCount;
}

//stuCount 就是您要的数量 记得给分哦

设置一个int类型的变量,让它等于1(放在循环结构里)。每输入一个学生的信息,使变量加一。元素个数就是变量的值

sizeof(数组名称)/sizeof(数组元素类型)

1.没办法直接计算得到数组大小,可以在你定义的结构体中添加一个用来记录整个数组大小的整型变量,数组中所有元素里面都会有这个变量,虽然不是什么特别好的办法,但是这种写起来还是比较轻松的。需要修改的时候把头部变量拿来改一下就行。
2.使用全局变量,这种方法也比较好写,就是管理起来很困难。

你的数组a[0]在赋值过程中就是0啊
即a[0]=0;
for(;j<MAX;j++)
{
if(a[j]==NULL)//如果数组为空则返回当前数组的下标,即为数组元素的个数
{ //或者这样写a[j]=='\0'
m=j;
printf("%d\n",m);
break;
}
}
所以上面程序j=0时,a[0] == NULL是TRUE,所以打印出m为0啊
所以你可以将赋值语句改一下即可
for(i=1;i<=10;i++)
{
a[i]=i;//对十个数组依次赋值
}

如有帮助,请采纳!!!

不用定义哈,数组应该有一个属性叫length,你直接使用:数组名.length就可以获取了