第一部分 宏定义

  宏定义的语法格式:#define <标识符><字符串>,其中的标识符就是所谓的符号常量,也称为”宏名”。预处理工作也叫宏展开。宏定义不占用内存和编译时间。
  
例题1:用#define实现宏,并求最大值。

#define MAX(x,y) (((x)>(y))?*(x):(y))

  注意在宏中需要把参数小心的用括号括起来,因为宏只是简单的文本替换,那么接下来给出一个实例来阐明刚才的说法。

例题2:

#define SQR(x) (x*x)
int main()
{int a,b=3;a = SQR(b+2);
}

  解析:这里定义的SQR(x)函数是想获得x的二次方,在第5行想得到(3+2)*(3+2)=25的结果。然而宏定义的展开是在预处理时期,这时并没有对b进行赋值,所以展开结果是a=(b+2*b+2)=11。为了达到原来的目的,需要改变原来宏定义后半部分为((x)*(x))

例题3:用宏定义得到一个数组所含的元素个数。

#define ARR_SIZE(a) ((sizeof(a))/(sizeof(a[0])))

第二部分 const的使用

const的作用:
1.const用于定义常量
2.const修饰函数形式参数:将输入参数为用户自定义类型和抽象数据类型时,将值传递改为“const &传递”可以提高效率。
  例如void fun(A const &a);用引用传递不需要产生临时对象,省了临时对象的构造、复制、析构过程,为了防止引用改变a的值,所以加入const。
3.const修饰函数的返回值
4.const修饰类的成员函数:任何不需要修改数据成员的函数都应该使用const修饰,int GetCount(void) const;

例题4:const的使用

int main()
{const int x=1;int b=10;int c=20;const int* a1=&b;int* const a2=&b;const int* const a3=&b;x=2;   //x是整形变量,不能改变其值,假若x未初始化,那么x是一个随机数a1=&c;//const在int*的左侧,用来修饰指针所指向的变量,即指针指向为常量。//上述是修改的指针a1的本身,而不是指针所指向的内容。*a1=1;//该命令是修改指针指向的内容,是不允许的。a2=&c;//const在右侧,修饰指针,即指针本身是常量,该句错误。*a2=1;//指针指向1,允许。a3=&c;*a3=1;//上述两句都是const常量,都是不允许的。
}

第三部分 static变量

例题5: static的作用

1.在函数体内,一个被声明为静态的变量在函数被调用过程中维持其值不变。
2.在模块内,一个被声明为静态的变量可以被模块内所有函数访问,但是不能被模块外其它函数访问。
3.在模块内,被声明为静态的函数只能被这一模块内的其它函数调用。即函数被限制在声明它的模块范围内。

例题6

staic全局变量与普通全局变量的区别:static全局变量只初始化一次,防止在其它文件单元中被引用;
staic局部变量与普通局部变量的区别:static局部变量只初始化一次,下一次依据上一次结果值。
staic函数与普通函数的区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份复制品。

第四部分:sizeof

例题7:使用sizeof计算普通变量所占空间

char str[]="Hello";
char* p = str;
int n = 10;
void* q = malloc(100);sizeof(str)= ___;  //str表示数组,得到结果是数组占用内存的总空间,注意数组最后有一个元素保存字符串结束符,6
sizeof(p)= ___;  //指针变量,4
sizeof(n)= ___;  //int形变量,4
sizeof(q)= ___;  //指向100字节的堆内存,4
//如果数组变量被传入函数中做sizeof运算,则和指针的运算没有区别;否则会得到整个数组占用内存的总大小。

C++常见问题(三)——宏定义、const、static、sizeof的相关实例相关推荐

  1. C++:重定义:符号重定义:变量重定义(二):解决变量重定义(const static)

    C++:重定义:符号重定义:变量重定义_hongwen_yul的博客-CSDN博客 上一篇文章中,我们知道解决变量重复定义其中一个办法是:尽量不要头文件中定义变量,头文件只做变量的声明.但是如果我们一 ...

  2. C++ const关键字的总结(全局/局部变量、修饰指针和引用、成员函数和数据成员、修饰类对象、const与宏定义的区别、Static与Const的区别)

    const关键字 const关键字 1.什么是const 2.使用原理 2.1.const全局/局部变量 2.2.cosnt修饰指针和引用 2.3.const修饰函数参数 2.4.const修饰函数返 ...

  3. const常量与define宏定义的区别

    #define RADIUS 100; const  float   RADIUS = 100; (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. ( ...

  4. 宏定义 #define 和常量 const 的区别

    学习笔记!参考链接 一.类型和安全检查不同 宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误: const常量是常量的声明,有类型区别,需要在编译阶段进行类型 ...

  5. const(常量)和#define(宏定义)区别

    编译器处理不同 宏定义是一个"编译时"概念,在预处理阶段展开(在编译时把所有用到宏定义值的地方用宏定义常量替换),不能对宏定义进行调试,生命周期结束于编译时期: const常量是一 ...

  6. define宏定义和const定义之间的区别

    define部分: 宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段.(宏的功能很强大,但也容易出错,所以其利弊大小颇有争议.) 宏的语法为: #define 宏名称 宏值 注意,宏定义不 ...

  7. 【C/C++】inline函数和static函数和宏定义的比较

    inline内联函数 1.内联函数的定义:内联函数是指用inline关键字修饰的函数.如果内联函数在类体内定义,不用inline关键字声明,默认为内联函数. 2.内联函数在函数调用点展开,没有栈帧的开 ...

  8. C语言概述(三)-- 宏定义、指针、结构体

    宏定义 指针 结构体 1.宏定义      #define      每个参数加上括号,结果也加上括号      否则,可能会因为运算的优先级问题导致结果错误 #define ADD(a,b) ((a ...

  9. java宏定义三目运算define_宏定义的正确写法,三目运算的宏定义

    摘要: 宏,分为两类: 1.对象宏(object-like macro) 对于对象宏来说确实相对简单,但却也不是那么简单 的查找替换 2.函数宏(function-like macro) 函数宏顾名思 ...

最新文章

  1. 大道至简阅读笔记03
  2. 基于LZ77算法的文件压缩收尾
  3. OSI模型 TCP/IP模型 数据包结构
  4. POJ2115 C Looooops(线性同余方程)
  5. 转: ant condition使用
  6. js遍历对象、遍历数组、js数组方法大全、区分map()和forEach()以及filter()、区分for...in...和for...of...
  7. PAT-乙级-1034 有理数四则运算
  8. 【LeetCode】 sort list 单清单归并
  9. 单层感知机实现或运算
  10. 08cms房产门户系统源码V8.6.1多城市版
  11. 北京邮电大学砸彩蛋大作业
  12. Scratch少儿编程(三)外观模块
  13. 网课研究生学术与职业素养讲座mooc答案
  14. 无盘服务器内存问题,无盘服务器内存占用过高
  15. camera杂项---两种shutter
  16. matlab中各种括号(),[],与{}的区别与认识
  17. 【记录踩坑】配置本地访问远程Linux系统服务器的jupyter notebook
  18. 猫鸡米问题java_人猫鸡米渡河问题的数学模型.doc
  19. 京沪高铁订单,日本落选!
  20. 电脑播放视频的时候有杂音

热门文章

  1. PHPStorm配置mysql
  2. linux 使用vim列转行以及文本英文大小写转换
  3. linux按照日期压缩解压文件
  4. 那些被误传的名言那些被隐藏的后半句
  5. 傅里叶变换系列FS,FT,DTFT,DFS,DFT,FFT
  6. python删除链表中的某一个值_删除链表中等于给定值val的所有节点(python实现)...
  7. scp命令Linux文件上传与下载,Linux利用scp命令上传下载文件
  8. 试药员体检​​​​​​​流程及注意事项介绍
  9. 使用多个文件练习:分别在当前目录中手动创建4个文本文件,名字分别命名为:毕业的日子.txt,最平凡处最美丽.txt,花开如笑.txt。分别读取每一个文本文件,统计文件中的句子数量。使用异常模块来处理读
  10. 中国电信天翼U盾产品荣获第三届网络安全国家标准优秀应用案例二等奖