C++常见问题(三)——宏定义、const、static、sizeof的相关实例
来源:互联网 发布:开淘宝网店心得 编辑:程序博客网 时间:2024/04/29 22:48
第一部分 宏定义
宏定义的语法格式:#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表示数组,得到结果是数组占用内存的总空间,注意数组最后有一个元素保存字符串结束符,6sizeof(p)= ___; //指针变量,4sizeof(n)= ___; //int形变量,4sizeof(q)= ___; //指向100字节的堆内存,4//如果数组变量被传入函数中做sizeof运算,则和指针的运算没有区别;否则会得到整个数组占用内存的总大小。
- C++常见问题(三)——宏定义、const、static、sizeof的相关实例
- 宏定义,const 与 sizeof
- 宏// const // sizeof // static // volatile 等关键词的用法
- 预处理、const、static与sizeof(一)
- 预处理、const、static与sizeof(二)(
- C++ static , const 以及static const的定义和初始化
- c/c++易错知识点整理2(预处理,const,static,sizeof)(上)
- c/c++易错知识点整理2(预处理,const,static,sizeof)(下)
- 预处理、const、static与sizeof
- 面试题:const、static、sizeof
- 【面试】预处理 const static sizeof
- C/C++程序设计03(宏,const,sizeof,内联函数)
- 宏定义,条件编译,const static
- sizeof和strlen区别,static和const的使用
- 关键字static/const的作用 const常量与define宏定义的区别
- const与#define宏定义的区别——C语言深度剖析
- const与#define宏定义的区别——C语言深度剖析
- const与#define宏定义的区别——C语言基础
- 4_Notebooks
- Activity的启动方式
- warning C4407: 在指向成员表示形式的不同指针之间进行转换,编译器可能生成不正确的代码
- 5_Writing
- (OK) Creating VMs from an existing VDI file —— in OS X
- C++常见问题(三)——宏定义、const、static、sizeof的相关实例
- 6_talks
- spring mvc @InitBinder
- 实习日记6_2016.06.27
- 7_Programming
- 不错的linux学习地址
- AR技术之--基于opencv的人脸识别(二)
- [2016/06/27] LeetCode / Java - Day 05 -
- 8_Advisors