数组长度(C函数怎么计算数组长度)

如何经过编程的手法获取某个数组的长度呢?

答案是使用关键字sizeof。
前面说过,用sizeof可以获得数据类型或变量在内存中所占的字节数。同样,用sizeof也可以获得整个数组在内存中所占的字节数。因为数组中每个元素的类型都是一样的,在内存中所占的字节数都是相同的,所以总的字节数除以一个元素所占的字节数便是数组的长度。
那么如何用sizeof获得数组总的字节数呢?只需对数组名使用sizeof,求出的便是该数组总的字节数。下面写一个程序看一下:
#include
intmain(void)
{
inta[10]={0};
printf(“sizeof(a)=%d\n”,sizeof(a));
return0;
}
输出结果是:
sizeof(a)=40
数组a是int型的,每个元素占4字节,所以长度为10的数组在内存中所占的字节数便是40。而总的字节数除以一个元素所占的字节数便是数组的长度,如下面这个程序:
#include
intmain(void)
{
inta[10]={0};
intcnt=sizeof(a)/sizeof(a[0]);
printf(“cnt=%d\n”,cnt);
return0;
}
输出结果是:
cnt=10
这样不管数组是增加仍是削减元素,sizeof(a)/sizeof(a[0])都能自动求出数组的长度。需要留意的是,它求出的是数组的总长度,而不是数组中寄存的有意义的数据的个数。比方界说一个int型的数组:
inta[10]={1,2,3,4,5};
咱们只初始化了五个元素,但是sizeof(a)/sizeof(a[0])求出的是10,而不是5。换句话说,咱们无法经过sizeof(a)/sizeof(a[0])求出数组中有多少个有意义的数据。

C

数组长度C函数怎么计算数组长度

(1)借助sizeof()函数:
#include
intmain()
{
//界说一个整型数组,并进行初始化赋值9个数据:
intarr[]={1,2,3,4,5,6,7,8,9};
intlength=0;
//核算数组中数据长度:
//一切数据的字节数除以一个数据的字节数即为数据的个数:
length=sizeof(arr)/sizeof(int);
printf(“数组的长度为:%d\n”,length);
return0;
}
(2)上面的办法会呈现一个误区
那便是当数组作为实参传递到另一个函数时,而这个函数履行了上面相同的办法,成果出来的不会正确的数组的长度:
测验代码:
#include
voidtest(intarr[])
{
intlength=0;
length=sizeof(arr)/sizeof(int);
printf(“test_数组的总字节数为:%d\n”,sizeof(arr));
printf(“test_数组的长度为:%d\n”,length);
}
intmain()
{
//界说一个整型数组,并进行初始化赋值9个数据:
intarr[]={1,2,3,4,5,6,7,8,9};
intlength=0;
//核算数组中数据长度:
//一切数据的字节数除以一个数据的字节数即为数据的个数:
length=sizeof(arr)/sizeof(int);
printf(“main_数组的长度为:%d\n”,length);
test(arr);
return0;
}
履行成果:
代码分析:
当将数组作为实参传递到另一个函数中时,另一个函数的形参相当于一个指针变量,因为将数组的名作为实参时,便是将数字的首地址作为实参,所以在test函数中输出的sizeof(arr)其实得到的是一个整型数组的长度(所占的字节数),所以成果是8,再用其除以int所占的字节数(4),成果便是2.
(这样是得不到精确的数组的长度的,主张的操作是在界说数组的函数中核算数组的长度,在以实参的形式传递出去,这样其他的函数变可以获得数组的长度)

© 版权声明
好牛新坐标
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章