宏定义,const 与 sizeof

1. size_t

    size_t:简单来说。是一种“整型”类型,里面保存的是一个整数,就像int, long那样。这种整数用来记录一个大小(size)。size_t的全称应该是size type,就是说“一种用来记录                     大小的数据类型”。通常我们用sizeof(XXX)操作,这个操作所得到的结果就是size_t类型。因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,                     也可以转化为int并赋值给int类型的变量。(引自:百度百科


2. 宏定义

2.1 #define 和 typedef 的区别 (引自:百度知道

1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:
#define PI 3.1415926
程序中的:area=PI*r*r 会替换为3.1415926*r*r
如果你把#define语句中的数字9 写成字母g 预处理也照样带入。

2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition。

3)typedef int * int_ptr;

#define int_ptr int * 
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。也就是说;

//refer to (xzgyb(老达摩))
#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是简单的宏替换

typedef int* int_ptr;
int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符

这也说明了为什么下面观点成立
//QunKangLi(维护成本与程序员的创造力的平方成正比)
typedef int * pint ;
#define PINT int *

那么:
const pint p ;//p不可更改,但p指向的内容可更改
const PINT p ;//p可更改,但是p指向的内容不可更改。

pint是一种指针类型 const pint p 就是把指针给锁住了 p不可更改
而const PINT p 是const int * p 锁的是指针p所指的对象。

3)也许您已经注意到#define 不是语句 不要在行末加分号,否则 会连分号一块置换。


2.2 #define

#define只是做简单的文本替换


3. const

1. 可以定义 const 常量,也可以修饰函数的参数和返回值,甚至函数的定义体。

2. const 和 #define

    const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只能进行字符替换,没有类型安全检查。

    在C++ 程序中只使用 const 常量而不使用宏常量,即 const 常量完全取代宏常量


4. sizeof

1. 指针的大小是个定值,占 4 字节

2. int 整型,占 4 字节

3. bool 型,占 1 字节

4. float 型,占 4 字节


例如:

#include <iostream>
using namespace std;

class A1
{
    public:
    int a;
    char c;
    static int b;      // int 大小为4,char 大小为1,静态变量存放在全局数据区,sizeof只计算栈中分配的大小。为照顾数据对齐,所以sizeof(A1) = 8

    A1();
    ~A1();
};

class A3
{
    public:
    float a;
    int b;
    char c;
    double d;     // float 为4,int 为4,char 为1,double 为8,为照顾数据对齐,所以 sizeof(A3) = 32
    A3();
    ~A3();
};

class A4
{
    public:
    double d; 
    float a;
    int b;
    char c;      // <span style="font-family: Arial, Helvetica, sans-serif;">double 为8,</span><span style="font-family: Arial, Helvetica, sans-serif;">float 为4,int 为4,char 为1,为照顾数据对齐,所以 sizeof(A4) = 24</span>
    A4();
    ~A4();
};


int main()
{
    cout << sizeof(A1) << endl;
    cout << sizeof(A3) << endl;
    cout << sizeof(A4) << endl;

    return 0;
}

4.1 sizeof 与 strlen



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1部分 求职过程  章 应聘求职   1.1 渠道   1.2 流程  第2章 简历书写   2.1 简历注意事项   2.2 简历模板  第3章 求职五步曲   3.1 笔试   3.2 电话面试   3.3 面试   3.4 签约   3.5 违约  第4章 职业生涯发展规划   4.1 缺乏工作经验的应届毕业生   4.2 更换工作的程序员们   4.3 快乐的工作 第2部分 C/C 程序设计  第5章 程序设计基本概念   5.1 赋值语句   5.2 i   5.3 编程风格   5.4 类型转换   5.5 运算符问题   5.6 a、b交换   5.7 C和C 的关系   5.8 程序设计的其他问题  第6章 预处理、constsizeof   6.1 宏定义   6.2 const   6.3 sizeof   6.4 内联函数和宏定义  第7章 指针与引用   7.1 指针基本问题   7.2 传递动态内存   7.3 函数指针   7.4 指针数组和数组指针   7.5 迷途指针   7.6 指针和句柄  第8章 循环、递归与概率   8.1 递归基础知识   8.2 典型递归问题   8.3 循环与数组问题   8.4 螺旋队列问题   8.5 概率  第9章 STL模板与容器   9.1 向量容器   9.2 泛型编程   9.3 模板  0章 面向对象   10.1 面向对象的基本概念   10.2 类和结构   10.3 成员变量   10.4 构造函数和析构函数   10.5 拷贝构造函数和赋值函数   10.6 多态的概念   10.7 友元  1章 继承与接口   11.1 覆盖   11.2 私有继承   11.3 虚函数继承和虚继承   11.4 多重继承   11.5 检测并修改不适合的继承   11.6 纯虚函数   11.7 运算符重载与RTTI  2章 位运算与嵌入式编程   12.1 位制转换   12.2 嵌入式编程   12.3 static 第3部分 数据结构和设计模式 第4部分 操作系统、数据库和网络 第5部分 综合面试题 附录A 面试经历总结

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值