sizeof()与strlen()的区别

来源:互联网 发布:中国石油大学网络自助 编辑:程序博客网 时间:2024/06/05 19:11

 面试的时候做笔试题的时候是否经常遇到这个题目,我遇到过很多此,讲讲自己的浅显的理解吧,如果想更深入的了解就去看看大神们的讲解吧,因为我是菜鸟中的菜鸟

sizeof()是运算符而不是函数,参数可以使类型,函数,变量,指针,对象等。sizeof()是在编译时计算,所以sizeof不能返回动态分配的内存空间的大小。

讲了这么多还没讲sizeof的功能了,sizeof是获取能容纳实现所建立的最大对象的字节大小。

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

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

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

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

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

strlen()是函数,要在运行时才能计算,参数必须是字符型指针(char*)。当数组名作为参数传入时,数组就退化成指针

strlen()返回字符串的长度,该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。

char* p="abcdefg";

strlen(p);// 7

sizeof(p);//4

char* pp=new char[5];

strlen(pp);//随机输出一个数从pp[0]开始直到遇到NULL结束

sizeof(pp);//错误,sizeof只能用在静态内存

sizeof(*pp);//输出1,返回类型所占的空间

struct A{
short int a1;
short int a2;
short int a3;
};
struct B{
long int b1;
short int b2;
};

sizeof(A);//输出6

sizeof(B);//输出8

char str[100];

strlen(str);//输出0

sizeof(str);//输出100



0 0
原创粉丝点击