sizeof和strlen的区别

本文详细解释了C/C++中sizeof运算符和strlen函数的区别及用法。sizeof用于计算数据类型或变量的字节数,而strlen则计算字符串的有效字符数量直至遇到NULL终止符。文章通过多个示例展示了它们在不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 sizeof
1.sizeof是一个运算符,它在头文件中被重命名为unsigned int .
2.它的作用是计算一种数据类型所占的字节数。
3.它的对象可以是数组,指针,对象,函数,结构体等。
4.它在编译阶段就完成了大小计算,所以不可以用来计算动态分配的空间的大小,而且sizeof的值与空间中的内容无关
5.sizeof计算各种数据类型时的含义:
数组名–表示数组类型的字节数(如 int arr[10] sizeof(a)/sizeof(a[0])表示计算int [10]这一数据类型的大小)
函数名–表示计算函数返回值的类型的字节数
指针–表示某一类型的地址的字节数(地址一般都占四个字节的大小)
对象–对象所有有效类型所占空间的和
例如

public:
    void Fun()//无论返回值为什么类型,都不算大小
    {
        cout << endl;
    }
private:
    int a;//大小为4
    int b;//大小为4

这时对象的大小为8个字节
但是这里要注意一个特例,就是函数被声明为virtual的时候,无论返回值的类型是什么,它的大小都为4。大家可以自己上机试验一下。

二.strlen
strlen 是一个函数,它是在运行时才计算数值的。它用来计算有效字符的个数,遇到NULL的时候停止计算。而且它的参数只能是字符数组名或者字符指针。当传入的参数是数组名的时候,数组名退化为指针。

三。接下来给出一些实例
int a[] = {1,2,3,4};
printf(“%d\n”,sizeof(a));//16
printf(“%d\n”,sizeof(a+0));//4 首元素的地址向后移动0个位置
printf(“%d\n”,sizeof(*a));// 4 a代表首元素的地址,这里就是首元素的大小
printf(“%d\n”,sizeof(a+1));//4 首元素的地址向后移动一个元素的元素地址
printf(“%d\n”,sizeof(a[1]));// 4 a【1】纸的大小
printf(“%d\n”,sizeof(&a));//4 取数组的地址
printf(“%d\n”,sizeof(&a+1));//4 数组的地址加一个数组长度的地址,即下一个数组的地址
printf(“%d\n”,sizeof(&a[0]));//4 数组首元素的地址
printf(“%d\n”,sizeof(&a[0]+1));//4 数组第二个元素的地址

int a[3][4] = {0};
printf(“%d\n”,sizeof(a));//48 数组名 代表首元素的地址,在sizeof中数组名代表整个数组元素,这里就是整个数组元素
printf(“%d\n”,sizeof(a[0][0]));//4, a【0】【0】的值
printf(“%d\n”,sizeof(a[0]));//16 一维数组名 代表第0行的元素
printf(“%d\n”,sizeof(a[0]+1));//4 .a【0】【1】的地址
printf(“%d\n”,sizeof(a+1));//4. 第2行的地址
printf(“%d\n”,sizeof(&a[0]+1));//4 第2行的地址
printf(“%d\n”,sizeof(*a));//16. a代表数组首元素的地址,即第一行的地址,这里的值为第一行的元素大小
printf(“%d\n”,sizeof(a[3]));//16 这一行的元素

char *name=”abcde”;
strlen(&name+1); 从 存储指针name的空间的下一块空间开始找\0
strlen(&name); 从&name指向的地址(即name这个指针的内容)第一个字符开始找\0
strlen(name); 给的是一个指针的话,是从该指针指向的地址(即从a开始)开始找一直到\0为止

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值