C++之sizeof与strlen区别

(一)sizeof
            首先要明确的一点是:sizeof并不是一个函数,而是一个单目操作符。它的功能是以字节的形式给出其操作数的存储大小。
            sizeof可以使用在数据类型上,例如:sizeof (int) 等,也可以用于变量:sizeof (变量name),也可以写成sizeof  变量name(不加括号),因为它是一个单目的操作符。不是函数。
           sizeof的结果是size_t类型的,也就是无符号整型。
            当对一个char型数组的标识符应用了sizeof,那么他的结果是整个数组的大小,而不仅仅是该数组首指针的大小。eg. char a[10]    sizeof (a) = 10,int a[10]   sizeof(a) = 10*4 = 40;
            当sizeof的对象是一个结构体或者是一个联合体的时候,那么他返回的结果是结构体或者联合的字节数,(注意,这个地方还包括了其中的填充,这些填充的是用来把结构体成员对齐到内存大小的,所以sizeof的结果有时不只只是简简单单的将成员相加。一般会使用pack字节对齐)。
             当对一个未设定大小的数组或者结构体,sizeof操作就会失败。
             示例程序:

#include <iostream>

#pragma pack(1)

using namespace std;

struct  studentInfo
{
	int iID;
	char pName;
};

int main()
{
    char a[10];//确定大小的数组
	cout<<"sizeof(a) : "<<sizeof(a)<<endl;//结果是10
	cout<<"sizeof(studentInfo):"<<	sizeof(studentInfo)<<endl;//结果是5,当改为#pragma pack(2)时,结果则为6
}


(二)strlen

         strlen是一个C语言的函数,它的功能就像是一个计数器,从内存的某个位置开始扫描,直到碰到第一个字符结束符‘\0’为止,返回统计值。

         其原型为:

           unsigned int strlen (const char* s),所属头文件为string.h

          对于strlen的学习可以直接通过程序来观察:

     

int main()
{
   char a[5];
   char b[5] = {'a','b','\0','c'};
   char *c = "Hello,World!";

   memset(a, 0, 5);
   memcpy(a,"Hello", 5);//此时数组a中放满了字符,没有'\0'。所以会导致strlen一直顺序扫描内存,直到出现'\0'

   cout<<"strlen(a):"<<strlen(a)<<endl;
   cout<<"strlen(b):"<<strlen(b)<<endl;//遇到'\0',就停止计数
   cout<<"strlen(c):"<<strlen(c)<<endl;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值