数组、字符串长度的计算
常见的计算长度的函数有两个,sizeof()和strlen(),但是,它们之间的差别还是很⼤的。
sizeof():主要负责计算数组的长度;
strlen():主要负责计算字符串的长度。
(1)sizeof():数组占⽤字节除以数组类型所占字节,结果为数组元素个数
使⽤⽅法:sizeof(数组名)/ sizeof(数组类型名)
(2)strlen():strlen,求字符串有效长度
⽅法:strlen(字符数组名)  //结果为字符数组有效字符长度,不包括末尾的’\0′
注意:当数组作为函数参数传递时,数组名代表的是数组的⾸址,⽽⾮数组内容,故⽆法使⽤sizeof和strlen;
所以,在传址时,应提供2个参数:1、数组名,代表数组⾸地址;2、数组元素个数,以便确定传递的次数。
下⾯来举个例⼦说明⼀下,不同情况下sizeof()的⽤法:
#include<iostream>
using namespace std;
void Sum(int array[ ])
{
cout<<“sizeof(array)=”<<sizeof(array)<<endl;
}
void main()
{
int a[ ]={1,2,3,4,5,6,7,8,9,10};
cout<<“sizeof(a)=”<<sizeof(a)<<endl;
Sum(a);
}
运算结果为:sizeof(a)=10  sizeof(array)=4
看到这样的结果,是不是感觉很奇怪?同样的数组,在不同的位置,输出却不⼀样。
分析:当数组作为函数参数传递时,数组名代表的是数组的⾸址,即指针,⽽⾮数组内容。如果传递整个数组,会导致栈溢出的。
所以在主函数中使⽤sizeof计算出的是准确的数组长度。⽽在调⽤函数中,由于传递的数组不再是数组本⾝,⽽是其地址,所以⽤sizeof计算出的,实际上是数组地址的长度,这时的sizeof(array),实际上是sizeof(int)。
因此,要想计算实际的数组长度,还是在主函数中求好,要是在调⽤时想⽤,可以作为参数传递过去嘛。
再来看看strlen()的⽤法:
若数组为存储字符串的字符数组,即以双引号括起来的字符串整体初始化的字符数组
例如:char a[]=”abcdefg”或者char a[]={“abcdefg”}
则所求得的长度为字符数组的长度,⽽不是对应的字符串的长度,要求字符串的长度还需要减1。
即:字符串长度=字符数组长度-1。
原因:存储字符串的字符数组末尾有⼀个’\0’字符,需要去掉它。对于char a[]=”abcdefg”
sizeof(a)/sizeof(a[0])=8,要求字符串长度的话应该减1。
注意:sizeof()在计算时,包括末尾的’\0′
strlen(a)=7,表⽰的就是字符串的长度。
sizeof 指针
但对于char a[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’}sizeof(a)/sizeof(a[0])=7

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。