C语言如何计算一维数组个数

例如:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
int a[10]={1,2,3,4,5};
int len= sizeof(a)/sizeof(a[0]);
return 0;
} 这个返回的是10 ,而我想要的是这个返回5 !!

main里面第一行,a[10]就表示分配了10个元素的空间,所以a的size是10个int,故结果为10。
所以就第一行改为a[5]或者a[]就可以了。
估计你想要的是a[]这种,根据你列表里的元素个数,自动分配。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-02-21
以上代码中sizeof(a)的结果是40,而sizeof(int)的结果是4,len就是10,即数组a所占int型的个数;
你可以进行循环判断,当a[i]至a[9]都为0时,有效数值的个数为i追答

参考代码如下:

#include
int main(void)
{
int a[10]={1,2,3,4,5};
int i,len=sizeof(a)/sizeof(int);
for(i=len-1;i>=0;i--)
if(a[i]!=0)break;
printf("%d",i+1);
return 0;
}

追问

int a[10]={0,1,2,3,4,5,0};这样就不对了

追答

除非你设个变量n,记录有效数值的个数。

本回答被提问者采纳
第2个回答  2019-02-21
方法一、最简单的一种获取数组元素个数的方法是通过while循环到'\0'字符之前的元素。
int main()
{
int a[] = { 1,2,3,4,5 };
下面是利用while循环获取数组中除了‘\0'的元素个数
int i = 0;
while (a[i] != '\0') {
//printf("%d\n", a[i]);
i++;
}
printf("%d\n", i);//返回数字5
return 0;
}
方法二、
int main()
{
int a[] = { 1,2,3,4,5 };
int len = sizeof(a) / sizeof(a[0]);//获取数组的定义长度
printf("%d\n", len);//返回数字5
return 0;
}追问

第一种如果 a[10]={0,1,2,3,4,5,0}就会错误,
第二种
#include
int main(void)
{
int a[];
int i=0;
scanf("%d",&i);
for(int j=0;j<i;j++)
a[j]=j;
printf("%d",i);
return 0;
}如何循环赋值啊 ,我也不知道赋值多少个, i不确定;

追答

首先声明一个变量i=0,使用while (a[i] != '\0'),不用事先知道数组的长度,每定义一个数组都是以‘\0'结尾,只要到\0循环就自动结束。

第3个回答  2019-02-21
初值表的内容是在编译期就确定的,从代码中可知初值表元素个数为5个,直接写5即可。
在运行时没有任何方法可以得知初值表中有多少个元素。
第4个回答  2021-03-11
我是用的VS2019编译的,这个sizeof运算符就直接计算出你inta[10]所预占的空间大小,试试strlen或者遍历计数吧
相似回答