sizeof()的用法和strlen()的区别

sizeof运算符返回类型或数据对象的长度(单位为字节)。

一、数组的sizeof(指出整个数组的长度,即括号里的值)

注意:1、如果将sizeof用于数组元素,则得到的是元素的长度。

2、如果将sizeof用于数组名,得到的将是整个数组中的字节数。

3、当字符数组表示字符串时,其sizeof值将’/0’计算进去。

 4、当数组为形参时,其sizeof值相当于指针的sizeof值。 

例子1:

   char a[20];
   char b[]={"abc"};
   char c[]={1,2,3};
   cout<<sizeof(a)<<endl;     //1、数组,值为20
   cout<<strlen(a)<<endl;     //2、值为11(这个值在不同的编译器值是不同的)
   cout<<sizeof(b)<<endl;     //3、字符串数组,值为4
   cout<<strlen(b)<<endl;     //4、值为3
   cout<<sizeof(c)<<endl;     //5、数组,值为3,注意因为不是字符串数组,所以'\0'没算进去
   cout<<sizeof(b[0])<<endl;  //6、数组元素,值为1
   cout<<sizeof(c[1])<<endl;  //7、数组元素,值为1
   cout<<c[2]<<endl;          //8、值为小爱心形状

 

sizeof()的用法和strlen()的区别:sizeof运算符指出整个数组的长度,但是strlen()函数返回的是存储在数组中的字符串的长度,而不是数组本身的长度。另外,strlen()只计算可见的字符,而不把空字符计算在内。(具体例子见上面)

函数strlen()从数组的第一个元素开始计算字符数,直到遇到空字符。对于未被初始化的数据,第一个空字符的出现位置是随机的。


void func(char a[3])
{
    int c = sizeof(a); //c = 4,因为这里a不在是数组类型,而是指针,相当于char *a。
}

对应上面注意事项的第四点。 

二、指针的sizeof

指针是用来记录另一个对象的地址,所以指针的内存大小当然就等于计算机内部地址总线的宽度。

在32位计算机中,一个指针变量的返回值必定是4。

指针变量的sizeof值与指针所指的对象没有任何关系。

三、 函数的sizeof

sizeof也可对一个函数调用求值,其结果是函数返回值类型的大小,函数并不会被调用

对函数求值的形式:sizeof(函数名(实参表))

注意:1)不可以对返回值类型为空的函数求值。 

            2)不可以对函数名求值。

           3)对有参数的函数,在用sizeof时,写上实参表。
例子:

float FuncP(int a, float b)
{
    return a + b;
}
 
int FuncNP()
{
    return 3;
}
 
void Func()
{
}
 
int main()
{
cout<<sizeof(FuncP(3, 0.4))<<endl; //OK,值为4,sizeof(FuncP(3,0.4))相当于sizeof(float)
cout<<sizeof(FuncNP())<<endl; //OK,值为4,sizeof(FuncNP())相当于sizeof(int)
/*cout<<sizeof(Func())<<endl; //error,sizeof不能对返回值为空类型的函数求值*/
/*cout<<sizeof(FuncNP)<<endl; //error,sizeof不能对函数名求值*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值