如果你经常刷笔试题,那你一定会刷到这样的题目:
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)); intb[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字节。
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
180文章
7591浏览量
135806 -
字符串
+关注
关注
1文章
570浏览量
20464 -
函数
+关注
关注
3文章
4276浏览量
62316 -
指针
+关注
关注
1文章
478浏览量
70489 -
数组
+关注
关注
1文章
412浏览量
25880
原文标题:strlen和sizeof
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
C语言中void指针的基本认识及典型应用
C语言中,*类型就是指针类型,比如 int *p,double *q,虽然是不一样的指针,但是大小却一样sizeof(p) == sizeof(q),因为它们都是同一种类型*类型的。
发表于 02-01 09:26
•1045次阅读
C语言sizeof和strlen的区别
大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是C语言sizeof和strlen的区别,希望能对你有所帮助
发表于 07-11 11:51
•1159次阅读
C语言中for循环的用法和应用 C语言中for循环与while循环的区别
C语言中的循环结构时,for循环是最常用的一种。它允许重复执行一段代码,直到满足特定条件为止。
发表于 08-18 16:33
•2969次阅读
strlen与sizeof区别
1.strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。char aa[10];cout
发表于 02-10 10:44
【求助】C语言中sizeof使用错误
();printf("output\n");printf("%d",sizeof('c'));printf("%d",sizeof(string1
发表于 11-08 11:26
c语言中double与float的区别 相关资料分享
c语言中double与float的区别C语言中小数的数据类型为 float 或 double:float 称为单精度浮点数,double 称
发表于 07-01 09:10
sizeof与strlen到底有什么区别经典C语言面试题讲解
基本定义1、sizeof是C/C++中的一个运算符,其作用是返回一个对象或者类型在内存中所占用的字节数。
注意:sizeof后面如果是类型则必须加括号,如
strlen和sizeof的异同
1,strlen函数作用:用于计算以空字符'\0'结尾的字符串的长度,即字符串中的字符个数,不包括空字符本身。返回值:strlen返回一个size_t类型的值,表示字符串中字符
评论