关于sizeof的用法,我已经在c语言操作符详解和c语言32个关键字中详细说明。此篇不再赘述,看过这两篇博客的人肯定已经知道sizeof是一个c语言运算符,它可以计算一个变量或者类型的的字节长度。那么它和strlen()函数有何区别?
区别:
为了帮助大家理解上面的表格,举几个例子来说明一下,
int main()
{
char a[] = "abc\012abc";
char b[] = "abc\0abc";
printf("sizeof(a)=%d\n", sizeof(a));//\012该字符串为一个八进制数据
// \0后面跟数据表示一个八进制字符,不跟数据说明为字符串结束符\0
printf("sizeof(b)=%d\n", sizeof(b));
printf("strlen(a)=%d\n", strlen(a));
printf("strlen(b)=%d\n", strlen(b));
return 0;
}
运行结果:
上面例子要注意如果\0后面跟数字说明表示该数为一个八进制数的字符,\0后不跟数据说明就是字符串结束符’\0’;还有就是当a定义为字符串时,编译器会默认加上\0
那么我们来分析一下答案:
sizeof(a)计算的是a数组的空间大小,一共识别处7个字符加\0结束符,结果为8
sizeof(b)计算b字符串的空间大小,一共7个字符和\0,结果仍为8
strlen(a)计算的是a字符串的长度,遇到\0结束,所以共计7个字符
strlen(b)计算字符串b的长度,遇到\0之前只有abc三个字符,故结果为3
接下来这段代码可以帮助大家理解sizeof在哪个时间阶段执行
int main()
{
int a = 3;
sizeof(a++);
printf("%d\n", a);
return 0;
}
如果你认为结果为4,那么就说明你对sizeof的理解还不深刻。
结果:
原因上述表格已经说到,在程序运行过程中第二行代码不再执行,因此a的值不改变。
来源:CSDN
作者:zz写代码
链接:https://blog.csdn.net/weixin_42572273/article/details/90411274