由sizeof和strlen想到的

一直以为自己理解了sizeof和strlen,当碰壁之后才发现自己理解的不够全面。
sizeof是C/C++中的一元运算符(不可重载),用于计算任意数据类型(基本型、符合型)、对象、函数所占据的大小,单位是字节。
strlen是C标准库中函数,只能用于计算字符串的长度(遇'\0'终止,不包括'\0')。

sizeof 类型,该类型所占的空间大小;
sizeof 对象,对象的实际占用空间大小;
sizeof 函数,函数的返回类型所占的空间大小;函数的返回类型不能是void。
sizeof 数组,编译时分配的数组空间大小;
sizeof 指针,存储该指针所用的空间大小。

注意:类、结构体静态成员变量不占用类、结构体内存,原因是编译器将其放在全局变量区。构造函数,成员函数和静态函数不占内存。

其中有2个问题值得去思考一下:
1.空类的sizeof为什么是1?
2.enum的sizeof为什么总是4?
在测试代码的注释中都做了解释。

strlen 从代表该字符串的第一个地址开始遍历,直到遇到结束符'\0';返回的长度大小不包括'\0'。 
注意:
当strlen用于数组时,返回的值可能是随机值,stlen会走出数组边界外,直到找到'\0'为止。

理解了下0, /0, NULL,
0是整形常量,可以表示有char,int,long,double,float;
'/0'是字符常量,表示空字符,常用于字符串的结束标志;
NULL是宏定义,在C语言中被定义为0,在C++中为(void *)0;
三者在数值上都是0(经过强转),只是在不同类型下表示的意义不一样。
 
0, /0, NULL都会占用sizeof的空间,strlen遇到这3者终止计数;如果直接将这三者传入strlen,程序将终止。

 

#include <iostream.h>

enum eNull
{
};
 
enum eMonth
{
  January, February, March, April, May, June, July, August, September, October, November, December
};
eMonth em;

struct sNull
{
};
sNull sn;

struct sBit
{
  int a:1;
};

class cNull
{
};
cNull objectCNull;

class cBit
{
public:
  int a:1;
  int b:1;
};
cBit cb;

class cChar 
{ 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值