整理下sizeof注意事项

sizeof(‘a’)的结果是多少?

这个要看是在C中还是C++中了。根据C99标准的规定,'a’叫做整型字符常量(integer character constant),为int型,故结果是4(对于32位机器);而ISO C++规定,'a’叫做字符字面量(character literal),为char型,故结果是1。C强调了’a’的“数”属性,而C++强调了’a’的“字符”属性。
————————————————
版权声明:本文为CSDN博主「RationalGo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/RationalGo/article/details/16801113

sizeof(“A”)的结果是多少?

"A"叫做字符串常量
1.字符串常量不能被赋值,同时字符串常量不能对值修改

2.字符串常量在内存中占若干字节(至少一个字符结束标志)占字节数等于字符串中字节数加一。在C语言中系统会在每个字符串的最后自动加一个’\0’(本身并不看作是字符串的一部分)作为字符串的结束标志。如’'hello"在内存中占六个字节。

3.无字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符数组。用数组中每一个元素存放一个字符。如char a[]=“hello”;

4.属于静态存储类,在整个程序运行中只存储一份。

利用strlen和sizeof求取字符串长度注意事项

首先,strlen是函数,sizeof是运算操作符,二者得到的结果类型为size_t,即unsigned int类型。大部分编译程序在编译的时候就把sizeof计算过了,而strlen的结果要在运行的时候才能计算出来。
对于以下语句:

char *str1 = “asdfgh”;
char str2[] = “asdfgh”;
char str3[8] = {‘a’, ‘s’, ‘d’};
char str4[] = “as\0df”;

执行结果是:

sizeof(str1) = 4; strlen(str1) = 6;
sizeof(str2) = 7; strlen(str2) = 6;
sizeof(str3) = 8; strlen(str3) = 3;
sizeof(str4) = 6; strlen(str4) = 2;

str1是字符指针变量,sizeof获得的是该指针所占的地址空间,32位操作系统对应4字节,所以结果是4;strlen返回的是该字符串的长度,遇到’\0’结束,’\0’本身不计算在内,故结果是6。

str2是字符数组,大小由字符串常量"asdfgh"确定,sizeof获得该数组所占内存空间大小,包括字符串结尾的’\0’,所以结果为7;strlen同理返回6。

str3也是字符数组,但大小确定为8,故sizeof得到的结果是8;strlen统计’\0’之前所有字符的个数,即为3;

str4是常量字符数组,sizeof得到字符总数即6;strlen计算至’\0’结束,因此返回2;

总结一句就是sizeof计算的是变量的大小,而strlen计算的是字符串的长度,前者不受字符’\0’影响,后者以’\0’作为长度判定依据。
————————————————
版权声明:本文为CSDN博主「shudaxia123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shudaxia123/article/details/47753505

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值