sizeof
在有些计算机语言中,sizeof是函数,在C/C++语言中,sizeof是关键字,也是操作符,功能是求某一数据类型或某一变量在内存中所占空间的字节数。其使用的一般形式为:sizeof(变量名或数据类型)
int main()
{
int *pi;
char *pc;
double *pd;
unsigned int a[10] = {1, 2, 3};
char s1[] = "xyz", s2[] = {'x', 'y', 'z'};
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
printf("%d, %d, %d\n", sizeof(pi), sizeof(pc), sizeof(pd));
printf("%d\n", sizeof(a));
printf("%d, %d\n", sizeof(s1), sizeof(s2));
return 0;
}
运行结果为:
4
1
4
8
4, 4, 4
40
4, 3
分析:s1[] = "xyz"是使用字符串初始化数组,系统会自动在字符串常量的最后加上一个’\0’字符,’\0’也要占用一个字节的存储空间,因此该数组的长度为4.
strlen
C/C++语言中提供了许多用于对字符串进行处理的函数,strlen函数是其中的一种。strlen函数的作用是求字符串长度,即字符串中包含的字符个数,不包括字符串结束标志’\0’在内。该函数的返回值为字符的个数。用法:strlen(字符数组名)。
int main()
{
char p[] = {'a', 'b', 'c'}, q[10] = {'a', 'b', 'c'};
printf("%d, %d\n", strlen(p), strlen(q));
printf("%d, %d\n", sizeof(p), sizeof(q));
return 0;
}
运行结果为:
15, 3
3, 10
分析:
- char型数组p[]初始化时没有指定元素个数,且数组中没有结束符’\0’,strlen函数的返回值是一个随机数;
- char型数组q在初始化时指定了元素个数为10,strlen函数返回其真实字符数3;
- sizeof是在编译的时候就将结果计算出来了类型或变量所占空间的字节数,所以以数组名做参数时计算的是整个数组的大小。而strlen是在运行的时候才开始计算结果。