sizeof 和 strlen
Posted kelamoyujuzhen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sizeof 和 strlen相关的知识,希望对你有一定的参考价值。
综述
strlen()求的是长度,针对的对象是字符串.
sizeof()求的是大小,针对的是类型。
首先要明确的一个概念是,strlen()是函数,而sizeof()表面看起来是函数,其本质是关键字。
函数必须有()
我们在写代码的时候,对于没有参数的函数,再调用的时候还是要写成fun(),为啥必须带那个()呢?反正有没有参数,省掉()岂不是更好。
函数名本质上代表函数的地址,对于没有参数的函数,如果不写(),也是可以编译过的,只不过不能调用函数。
不带()源码:
1 #include <stdio.h> 2 void fun() 3 { 4 printf("hello "); 5 } 6 7 void main() 8 { 9 fun; 10 getchar(); 11 }
运行结果:
带()源码:
1 #include <stdio.h> 2 void fun() 3 { 4 printf("hello "); 5 } 6 7 void main() 8 { 9 fun(); 10 getchar(); 11 }
以上实验说明,函数必须有()。
证明sizeof是个关键字
sizeof是个关键字,有没有()都可以。但是为了程序可读性,最好加上()
证明sizeof是个关键字,源码
1 #include <stdio.h> 2 3 void main() 4 { 5 int a = 10; 6 printf("%d ",sizeof(a)); 7 printf("%d ", sizeof a); 8 printf("%d ", sizeof(10)); 9 printf("%d ", sizeof 10); 10 printf("%d ", sizeof(int)); 11 //printf("%d ", sizeof int);错误写法 12 getchar(); 13 }
运行结果
区分数字0,字符0,字符‘ ‘
字符‘0‘和字符‘ ‘是完全不一样的东西,‘ ‘是字符串的终结者。但是字符‘ ‘和数字0是等价的。见代码
1 #include <stdio.h> 2 3 void main() 4 { 5 /* 输出值5 6 char str[10] = { ‘h‘,‘e‘,‘0‘,‘l‘, ‘o‘ }; 7 printf("%d ", strlen(str));*/ 8 /*输出值2 9 char str[10] = { ‘h‘,‘e‘,‘ ‘,‘l‘, ‘o‘ }; 10 printf("%d ", strlen(str));*/ 11 /*输出值2 12 char str[10] = { ‘h‘,‘e‘,0,‘l‘, ‘o‘ }; 13 printf("%d ", strlen(str));*/ 14 getchar(); 15 }
1 #include <stdio.h> 2 3 //void main() 4 //{ 5 // char str[]="hello"; 6 // printf("%d ",sizeof(str));//6 7 // printf("%d ", strlen(str));//5 8 // getchar(); 9 //} 10 11 //void main() 12 //{ 13 // char str[10] = "hello"; 14 // printf("%d ", sizeof(str));//10 15 // printf("%d ", strlen(str));//5 16 // getchar(); 17 //} 18 19 //void main() 20 //{ 21 // char str[] = {‘h‘,‘e‘,‘l‘,‘l‘, ‘o‘}; 22 // printf("%d ", sizeof(str));//5 23 // printf("%d ", strlen(str));//不一定,看啥时候早到 了。strlen的关键就在于寻早‘ ‘ 24 // getchar(); 25 //} 26 27 //void main() 28 //{ 29 // char str[10] = { ‘h‘,‘e‘,‘l‘,‘l‘, ‘o‘ }; 30 // printf("%d ", sizeof(str));//10 31 // printf("%d ", strlen(str));//5 获益于不完全初始化,字母o后面被填充了数字0 32 // getchar(); 33 //} 34 35 //void main() 36 //{ 37 // char str[10] ; 38 // printf("%d ", sizeof(str));//10 39 // printf("%d ", strlen(str));//不一定,看啥时候早到 了。strlen的关键就在于寻早‘ ‘ 40 // getchar(); 41 //} 42 43 //char str[10]; 44 //void main() 45 //{ 46 // printf("%d ", sizeof(str));//10 47 // printf("%d ", strlen(str));//0 48 // getchar(); 49 //} 50 //当str定义为全局变量的时候,str在栈区。相比较局部变量,在未初始化前提下,系统给他们的初始值不一样。随机变量的初始值是随机值。栈区用数字零填充 51 52 //void main() 53 //{ 54 // char *str="Hello" ; 55 // printf("%d ", sizeof(str));//4 str是一个指针类型,sizeof是求类型大小 56 // printf("%d ", strlen(str));//5 57 // getchar(); 58 //} 59 60 void main() 61 { 62 char *str[3] = {"Hello","My","UESTC"}; 63 printf("%d ", sizeof(str));// 64 printf("%d ", sizeof(*str));// 65 printf("%d ", strlen(str)); 66 printf("%d ", strlen(*str));// 67 68 getchar(); 69 }
以上是关于sizeof 和 strlen的主要内容,如果未能解决你的问题,请参考以下文章