运行结果如下:
文章插图
注意:
- 半缺省参数必须从右向左依次给出,不能间隔着给
- 缺省参数不能在声明中和定义中同时出现(推荐写在声明中)
- 缺省参数必须是全局变量和常量
- C语言中不支持缺省参数
- const类型定义: 指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令
- 可以保护被修饰的东西,防止意外的修改,增强程序的健壮性
- 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高
- 可以节省空间,避免不必要的内存分配
- const离谁近,谁就不能被修改
- const修饰一个变量时,一定要给这个变量初始化,若不初始化,在后面也不能初始化
常变量: const 类型说明符 变量名 常引用: const 类型说明符 &引用名 常对象: 类名 const 对象名 常成员函数: 类名::fun(形参) const 常数组: 类型说明符 const 数组名[大小] 常指针: const 类型说明符* 指针名 ,类型说明符* const 指针名const全局/局部变量C在C语言中const修改全局变量是存储在全局区(即静态存储区),修饰局部变量时存储在栈区
//const修饰的常量const int a = 10;//全局const常量,放在常量区,受到常量区的保护void test01(){ //直接修改失败 a = 100; //间接修改失败 int *p = &a; *p = 100;}
- 全局的const修饰的变量本质就是常量,全局const修饰的变量放在常量区中,不能通过变量名直接修改也不可以通过地址来间接修改
- 局部const修饰的变量是个伪常量,不是真正意义上的常量,数据存放在栈区而不是常量区,可以间接修改但是不能直接修改 。
- C语言的const修饰的全局变量和局部变量都有空间
- C语言的const修饰的全局变量具有外部链接属性,可以采用extern声明在别的文件中使用
举个例子:
const int aa = 10;//没有内存void test01(){ cout << aa << endl;//在编译阶段,编译器会自动优化,将aa直接替换成常量10 const int bb = 20;//栈区 int *p = (int *)&bb; *p = 200; cout << bb << endl;//输出的还是20,还是那句话,在编译阶段代码中的bb就已经全部被替换成20,此时其实输出的是这样的cout << 20 << endl;但是变量bb此时的值已经被改变了,变成了200,但是由于编译器优化,造成了常量折叠现象}
经验总结扩展阅读
- 手机怎么把QQ空间说说一次性全删掉(qq如何恢复删掉的说说)
- 怎么一次性删掉QQ空间里的全部说说(翻看以前qq空间的说说)
- 怎么把空间说说全部清空(qq空间一键清空所有说说)
- 手机QQ空间怎么一次性删除说说求解(怎么一键删除qq说说)
- qq空间说说怎么全部删除(怎样一键清空qq空间)
- 小户型卧室如何设计 小户型卧室空间布局设计
- 恋梦空间郭蓉和谁在一起了?
- 空间站是静止的还是运动的
- 如何注销空间 1980717Z空间
- qq空间说说怎么全部删除(qq空间说说一键恢复)