本文共 1470 字,大约阅读时间需要 4 分钟。
sizeof(...)是运算符,参数可以是数组,指针,类型,对象,函数等。
它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
sizeof 返回的值表示的含义如下:
数组 -编译时分配的数组空间大小;
指针 - 存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4 );
类型 -该类型所占的空间大小;
对象 -对象的实际占用空间大小;
函数 - 函数的返回类型所占的空间大小。函数的返回类型不能是void 。
strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char * )。当数组名为参数传入时,实际上数组就会退化成指针了。
它的功能是:返回字符串的长度该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符 NULL 。返回的长度大小不包括NULL 。
大部分编译程序在编译的时候就把的的的sizeof 计算过了的英文类型或是变量的长度这就是的的的sizeof(X)可以用来定义数组维数的原因
举几个例子:
char str [20] =“0123456789”;
int a = strlen(str); / * A = 10; strlen的计算字符串的长度,以\ 0' 为字符串结束标记。
Int b = sizeof(str); / * B = 20;的sizeof 计算的则是分配的数组STR [20] 所占的内存空间的大小,不受里面存 储的内容影响
char * str1 =“absde”;
char str2 [] =“absde”;
char str3 [8] = {'a',};
char ss [] =“0123456789”;
输出:
sizeof(str1)= 4;
sizeof(str2)= 6;
sizeof(str3)= 8;
sizeof(SS)= 11;
首先说明一点, char 类型占一个字节,所以 sizeof(char) 是 1 ,这点要理解str1 是一个指针,只是指向了字符串“absde” 而已。所以的的sizeof(str1)不是字符串占的空间也不是字符数组占的空间,而是一个字符型指针占的空间。所以的的sizeof(str1 )= sizeof(char *)= 4 ,在C / C ++ 中一个指针占4 个字节
str2 是一个字符型数组.C / C ++ 规定,对于一个数组,这个报道查看数组占位的总空间,所以的的的sizeof(STR2)取得的是字符串“absde” 占的总空间。“absde” 中,共有absde \ 0 六个字符,所以STR2 数组的长度的英文6 ,所以的sizeof(STR2)= 6 *的sizeof(char)的= 6
str3 已经定义成了长度是8 的数组,所以的的的的sizeof(STR3)为8
str4 和str2 类似,' 0''1 '...'9' 加上'\ 0' 共11 个字符,所以ss 占的空间是 11
总之,对于指针, sizeof 操作符返回这个指针占的空间,一般是4 个字节;而对于一个数组,sizeof 返回这个数组所有元素占的总空间。char * 与char [] 容易混淆,一定要分清,而且字符* = “AAA” 的写法现在不被提倡,应予以避免
而 strlen的不区分是数组还是指针,就读到\ 0 为止返回长度。而且strlen的是不把\ 0 计入字符串的长度的
转载地址:http://hlxrb.baihongyu.com/