您的位置:首页 > 编程语言 > C语言/C++

C语言之sizeof与strlen

2019-08-16 12:05 831 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_38958704/article/details/99674852

#include <stdio.h>
#include <string.h>

int main(void)
{
char *p1 = “abcde\0f”;
char a[] = “abcde\0f”;
printf("%2d",strlen(p1));
printf("%2d",sizeof(p1));
printf("%2d",strlen(a));
printf("%2d",sizeof(a));

char *p2 = a;
printf("%2d",sizeof(*p2));

return 0;

}
上述代码输出结果:5,4,5,8, 1
本道题主要考察两个方面:一是strlen与sizeof的用法;二是指针与数组的部分区别。
strlen是字符串相关的库函数,它的作用是计算字符串的长度,当遇到‘\0’时停止计算,字符串长度不包含‘\0’字符。所以strlen§和strlen(a)的长度都是5.
sizeof是运算符而不是函数,用来获取括号()里面数据类型或者变量所占用的内存字节数。sizeof§计算指针变量p在内存中占的大小。在32位系统中,任何类型的指针通常都占4字节大小。sizeof(a)计算数组a占内存的大小,通过sizeof计算数组的大小时,其结果是数组定义时指定的大小或字符串常量的长度加1,故这里的sizeof(a)是8. sizeof(*p2), *p代表的是第一个元素a[0]的空间,空间大小为1.
strlen与sizeof的更多区别如下:
1、strlen函数的结果在运行的时候才能计算出来,是用来计算字符串的长度,不是计算占内存的大小。
2、sizeof操作符的结果类型是size_t(实质是int类型)。
3、sizeof可以用类型做参数,strlen只能用char * 做参数(字符串),且必须是以‘\0’结尾。sizeof还可以用函数来做参数(如sizeof(fuc()))。
4、sizeof后如果是类型必须加括号,如果是变量名可以不加括号。
5、数组做sizeof的参数时不退化(还表示的是数组),传递给strlen后退化为指针(指向数组的第一个元素)。
6、当用于一个结构类型或变量时,sizeof返回实际的大小。sizeof操作符不能返回动态地被分派了的数组或外部的数组的尺寸。(sizeof返回的是一个确定值,不能给一个不确定分配多少内存大小的数组)。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: