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

C++之sizeof与strlen区别

2011-12-07 16:07 531 查看
(一)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;
}


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