C++中的基础相关知识之预处理,const,sizeof

2,预处理 宏定义 #define
宏指的是一个简单的替换,如 #define sub(x,y) x-y 和#define sub(x,y) (x-y); a*sub(c,d)针对于上面的宏是不同的结果。
在编译时没有进行类型安全检查。
3,常量 关键字 const
a,定义的时候必须要初始化,并且常类型的变量或对象的值是不能被更新的。
b,将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义.
extern const int ValueName;
c,const 修饰指针变量
主要看const在号之前还是之后,如果之前表示修饰指向的内容,之后表示修饰指针变量。
d, const 修饰成员函数
表示只读的函数,不对类的成员变量进行修改,不能调用飞const成员函数。int getY()const;
const和#define比有什么不同(优点)?
(1)const常量有数据类型,而宏常量没有数据类型
(2)const在编译时进行了安全检查,而宏常量只是简单地字符替换。
4, sizeof() 函数
求解变量中的内存所占的字节数。
一个指针的大小4个字节。一个字符数组的大小由填充的值决定,同时要考虑末尾的隐藏“\0”字符。
一般情况下 short 2个字节,int long都是4个字节。
sizeof一个空的类的大小是一个字节。一个类能够实例化,编译器就需给它分配内存空间,来指示类实例的地址这里编译器默认分配了一个字节(如:char),以便标记可能初始化的类实例,同时使空类占用的空间也最少(即1字节)。struct 和 class 在空的时候会自动加一个 char 或 int 变量 进去.
原因是 如果struct 或 class 为空,指向他们的指针将无法区分一个或多个同类的struct/class.就是说,在实例化的时候会导致指针错乱.
还是举个例子来解释吧, 如果 class 为空, 那么对于数组 a[10] 来说, a , a+1 , a+9 实际上都是指向a[0], (因为 a+n 实际上是 a+sizeof(class)*n )
那么怎样区分 a[0] 和 a[9] 呢? 这就出问题了.
sizeof和strlen之间的的区别
strlen的参数只能是char*,且必须是以“\0”结尾的。它内部的实现是用一个循环计算字符串的长度,直到“\0”为止且不包含它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值