C语言中如何求数组真实存有数据的元素个数
# include <stdlib.h>
# include <time.h>
int main()
{
int a[100];
int n;
int i;
int len;
scanf("%d",&n);
for(i=0;i<n;i++)
{
a[i] = i;
}
len = (sizeof(a)/sizeof(a[0])); printf("%d",len);
}
比如说,上面这个代码,输出的len永远是100。但是其真正储存了数据的是其中的前N个元素,如何求这个N 展开
这个是比较容易解决的,这是我把楼主的程序略加修改后的代码:
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int main()
{
int a[100];
int n;
int i;
int len=0; //此行给len初始化;
scanf("%d",&n);
for(i=0;i<n;i++)
{
a[i] = i;
++len; /*此处算是这个程序里面求数组a实际长度的要点了,
每循环一次,len的值就加1(从初始值0开始加的),所以当循环n次后,len就记下了数组的长度!*/
}
//len = (sizeof(a)/sizeof(a[0]));因为只是为了让len表示数组a的值,所以为了求len不必采用这样的方法;
printf("%d\n",len);//加个换行符输出时看的明显些;
}
这是我自己运行的结果,楼主可以自己运行着看看,这样输出的结果就是数组a的实际长度了:
楼主还有什么疑问可以尽情问,还有,以后若是想求一个数组的实际长度,且这个数组是字符数组时,楼主只需要在头文件中包含#include<string.h>后,就可以在求字符数组的实际长度时;用语句 int len; //用于存储字符的实际长度;
len=strlen(a),其中a是要求的字符数组的名称,不必加下标;很方便的,希望能帮到楼主哦。
或者另外一个数组记录
当前用了几个(顺序加入顺序移除)
或者另外一个同大小的数组来记录到底用了哪几个(随机加入随机删除)
anything a[n];
int used[n];
memset(used,0, sizeof(int)*n);
a[i] = ..;used[i]=1;
这样统计used就可以了
当你定义a[100]时。系统已经随机分配了数据。不信你不要赋值输出来看看。所以按照你那么说是算不了的。