如果你经常刷笔试题,那你一定会刷到这样的题目:
char str[] = “hello”;printf(“%d %d”, sizeof(str), strlen(str));const char *str = “hello”;printf(“%d %d”, sizeof(str), strlen(str));
把 sizeof 和 strlen 放在一起考察,题目不难,只要你的c语言基本功扎实,做出来应该没问题。
第一个,str是个数组,数组里面的内容是字符串hello。但是需要注意的是,字符串都是以'�'结尾,所以数组实际占6个字节。
sizeof是关键字,用于求解类型的长度,sizeof加上数组名,表示数组所占的字节数,所以结果是6。
strlen是字符串处理函数,求解字符串的长度,长度不包含'�',所以结果是5。
第二个,str是指针,指向字符串常量。
sizeof加上指针,表示指针变量占的字节数,32位系统是4字节,64位系统是8字节。至于说字符串长度,跟上面一样,是5个字节。
这些都算是常见的,我们再来看下不常见的,指针都当作8字节来处理。int a[] = {1, 2, 3}; printf(%ld, sizeof(&a));printf(%ld, sizeof(*a));int b[2][3] = {0};printf(%ld, sizeof(b[0]));printf(%ld, sizeof(b[0] + 1));printf(%ld, sizeof(&b[0]));
一个一维数组,&a表示数组的地址,sizeof(&a)是8字节。
*a表示数组第一个元素,sizeof(*a)是4个字节。
对于二维数组,b[0]表示首行首元素地址,类似于一维数组的数组名,sizeof(b[0])就是第一行的长度12字节。
b[0]+1表示首行第二个元素的地址,编译器当作指针来处理,sizeof(b[0] + 1)是8个字节。
&b[0]表示数组首行地址,编译器同样把它当作指针来处理,sizeof(&b[0])也是8字节。
关于太赫兹辐射在医学领域中的应用分析
首个集成磁性传感器和有机电路的柔性电子产品问世
Java实现异步编程的八种实现方式
努比亚Z17mini和荣耀8哪个值得买?你想知道的都在这里
无线网络中怎么隐藏电脑
C语言中strlen和sizeof的区别
智能化妆镜的魅力,它能否刺激你的购买欲望
TE推出商用/工业车辆充电插座
如何制作低功耗数字MEMS麦克风
光电式绝对编码器
蔚来在新交所成功上市,港股受其影响上涨8.82%
ASUS智能路由器RT-AC5300怎么样 值不值得买
简单认识俊凯达101W大功率快充车充
机械硬盘价格暴跌,出货量触底反弹
闻泰科技经营资金盈余亮眼 偿还贷款绰绰有余
永贵电器发布2019年第三季度报告营业收入为29138660799元同比减少14.27%
香橙派Orange pi i 96技术分析
ZOWIE GEAR XL2546S专业电竞显示器,搭载DyAc+技术
TCL全球化营销战略升级 与国际顶级品牌同台竞技
GFC-8270H/8131H数字频率计的功能特点及应用范围