1、计算以下sizeof的值。
char str1[] = {
'a', 'b', 'c', 'd', 'e'};
char str2[] = "abcde";
char *ptr = "abcde";
char book[][80]={
"计算机应用基础","C语言","C++程序设计","数据结构"};
sizeof(str1)=?
sizeof(str2)=?
sizeof(ptr)=?
sizeof(book)=?
sizeof(book[0])=?
分析:
sizeof(str1)=5,就是5*sizeof(char)=5;
sizeof(str2)=6,字符串都是以'0'结尾,所以所占字节数为6;
sizeof(ptr)=4,ptr是一个指针,在32位平台上大小为4字节;
sizeof(book)=320,book是一个二维数组,4*80*1
sizeof(book[0])=80,book[0]是第一维数组,因为此80*1
根据sizeof求数组元素的个数也很简单,拿第一个来说,就是sizeof(str1)/sizeof(char)。
2、上面是求计算他们所占字节数,下面来看看怎么求字符串或数组的实际长度。计算下面strlen值。
char arryA[] = {
'a','b','c','0','d','e'};
char arryB[] = {
'a','b','c','d','e'};
char arryC[6] = {
'a','b','c','d','e'};
char *str = "abcde";
分析:
strlen(arryA) = 3,strlen遇到'0'就会返回,无论后面有多少个字符;
strlen(arryB)长度无法确定,没有人为写入‘0’,strlen会继续计算直到找到结束符,结果未知;
strlen(arryC)=5,指定了数组大小,编译器会自动在空余地方添加'0',这其实跟char arryC[6] = {'a','b','c','d','e','0'};等价。
strlen(str) = 5,不包括结尾的'0'。
由以上两个我们来看看strlen和sizeof的区别:
(1)、sizeof是C语言中的一个单目运算操作符,类似++、--等;
用于数据类型,sizeof(type),比如sizeof(int)
用于变量,sizeof(var_name)
注意:sizeof不能用于函数类型、不完全类型或位字段。不完全类型是指具有未知存储大小的数据类型,比如未知存储大小的数组类型、
未知内容的结构体或联合类型,void类型等。例如: sizeof(max),若此时变量max定义为int max(); sizeof(char_v),此时char_v
定义为char char_v[MAX]且MAX未知。
(2)、strlen是个函数,其原型为unsigned int strlen(char *s);
streln的计算必须依赖字符序列中的'0',通过该字符来判断字符序列是否结束。
3、忽悠人的char st