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操作就会失败。
示例程序:
(二)strlen
strlen是一个C语言的函数,它的功能就像是一个计数器,从内存的某个位置开始扫描,直到碰到第一个字符结束符‘\0’为止,返回统计值。
其原型为:
unsigned int strlen (const char* s),所属头文件为string.h
对于strlen的学习可以直接通过程序来观察:
首先要明确的一点是: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; }
相关文章推荐
- C++(C)中Sizeof与Strlen的区别
- 【C++基础】sizeof 与 strlen的区别
- C++-sizeof和strlen的区别
- C++ sizeof strlen区别
- C/C++ sizeof与strlen区别
- C++开发面试题:sizeof与strlen区别
- C、C++基础知识之二 sizeof和strlen之间的区别
- c++中sizeof和strlen的区别
- C/C++学习之strlen与sizeof区别、阿里巴巴笔试题实例
- C/C++之sizeof与strlen的区别
- C/C++:Sizeof与Strlen的区别与联系
- C/C++ sizeof与strlen区别
- C++ 学习(第一天)sizeof与strlen 的区别
- c++ 堆和栈的区别 ,sizeof详解以及sizeof与strlen的区别,memset和fill的比较
- C/C++之sizeof与strlen的区别
- C/C++中字符串长度strlen()/sizeof()区别
- C++基础--sizeof和strlen的区别
- C/C++中 sizeof()与strlen()的区别
- C++中strlen与sizeof的区别
- C/C++ sizeof与Strlen的区别与联系