sizeof 与 strlen

sizeof 

  • 功能:求对象所占用的字节大小
  • 用法:sizeof(类型说明符,数组名或表达式)或sizeof 变量名;返回值unsigned int;
  • 说明:sizeof是一个操作符而非函数
  • 例1:
    • int i;
    • sizeof( i );     // ok
    • sizeof i;        // ok
    • sizeof( int ); // ok
    • sizeof int;    // error
    • sizeof (2);   // ok, 2的类型为int,所以等价于 sizeof( int );
    • sizeof( 2 +3.14);   // ok, 3.14的类型为double,2也会被提升成double类型,所以等价于 sizeof( double );
  • 例2:计算静态数组大小
    • char str[20]="0123456789";
    • int b=sizeof(str); //而b=20; >>>> sizeof 计算的则是分配的数组 str[20] 所占的内存空间的大小,不受里面存储的内容改变。
  • 例3:
    • char* ss = "0123456789";
    • sizeof(ss);    //结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的值所占的空间,应该是长整型的,所以是4
    • sizeof(*ss);    //结果 1 ===》*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占了 1 位
  • 例4:
    • char ss[] = "0123456789";
    • sizeof(ss);     // 结果 11 ===》ss是数组,计算到\0位置,因此是10+1
    • sizeof(*ss);    // 结果 1 ===》*ss是第一个字符

strlen

  • 原型:unsigned int strlen(char *s);
  • 功能:统计从字符串s地址开始的,直到碰到第一个字符串结束符'\0'为止的字符个数
  • 头文件:string.h
  • 例1:
    • char aa[10];  cout<<strlen(aa)<<endl;                //结果是不定的
    • char aa[10]={'\0'};   cout<<strlen(aa)<<endl;     //结果为0
    • char aa[10]="jun";   cout<<strlen(aa)<<endl;     //结果为3
  • 例2:
    • int ss[100] = "0123456789";
    • strlen(ss);    // 错误 ===》strlen的参数只能是char* 且必须是以'\0'结尾的

sizeof和strlen比较:
  1. sizeof在编译时刻计算,strlen在运行时计算
  2. 数组做sizeof的参数不退化,传递给strlen就退化为指针了
  3. 注意:数组作为函数形参传递时转换为对应的指针变量。比如:void foo3(char arr[3])  等价于void foo3(char *arr)  ,所以在函数中,sizeof(arr) 等价于sizeof (char *),结果为4;

参考资料:
  1. strlen百度百科
  2. sizeof百度百科
  3. 扩展阅读:字节对齐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值