【C语言】size与strlen的区别解析

一.sizeof

    sizeof(...)是运算符参数可以是数组,指针,类型,对象,函数等。

    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。

    sizeof 返回的值表示的含义如下:

    数组 -编译时分配的数组空间大小;

    指针 - 存储该指针所用的空间大小(存储该指针的地址的长度,是长整型应该为4 );

    类型 -该类型所占的空间大小;

    对象 -对象的实际占用空间大小;

    函数 - 函数的返回类型所占的空间大小。函数的返回类型不能是void

二.strlen

    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 计入字符串的长度的

猜你喜欢

转载自blog.csdn.net/csdn_baotai/article/details/80380442