sizeof以及strlen区别

一 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为止 

作者:db199410
来源:CSDN
原文:https://blog.csdn.net/db199410/article/details/51482194
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值