概述
sizeof():是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,
参数可以是数组、指针、类型、对象、函数等。
功能是:获得保证能容纳实现所建立的最大对象的字节大小。
strlen():是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,
实际上数组就退化成指针了。
功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际
完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。
返回的长度大小不包括NULL。
1、
char* ss = "0123456789";
sizeof(ss); //结果 4 ;
sizeof(*ss); //结果 1;*ss其实是获得了字符串的第一位'0'所占的内存空间;
strlen(ss); //结果是10 ;
char str[20] = "0123456789"
sizeof(str) = 20
strlen(str) = 10
char str[] = "abc\0"
strlen(str) = 3;
sizeof(str) = 5;
char*str="i am ok!"
sizeof(str)=4, 因为str是个指针变量,
sizeof("i am ok!")=9;这里有5个字符,2个空格,1个叹号,还有字符串的结束符‘/0';
2、
int *p = NULL; // sizeof(p)=4, sizeof(*p)=4
int a[100]; // sizeof(a)=400, sizeof(&a)=4 , sizeof(a[100])=4 , sizeof(&a[0])=4
int b[100];
void fun(int b[100])
{ sizeof(b); } // sizeof(b)=4
char (*pArray1)[4]={0}; sizof(pArrya1)=4,
char (*pArray2[10])[4]={0}; sizof(pArrya2)=40,
char (*pArray3[100])[4]={0}; sizof(pArrya3)=400
3、
int *p=malloc(100); // sizeof(p) = 4 sizeof(p) 只能测定 指针大小,32位机上得4。
sizeof 不能测定动态分配的数组大小
int b[ ][3] = {{1},{3,2},{4,5,6},{0}};中,sizeof(b) = 48
本文详细解释了C/C++中sizeof运算符与strlen函数的区别及用法。sizeof用于获取对象或类型的字节大小,而strlen用于测量字符串长度,不包含终止符。通过多个示例展示了它们在不同场景下的应用。
2625

被折叠的 条评论
为什么被折叠?



