C++基础 —const关键字
const 关键字的用法。const 修饰的是指针本身,还是指针变量。?
#include <stdio.h> int main(void) { const int a = 2; int const b = 1; //一样 int f = 3; const int *c; //const修饰的是指针所指向的内存空间,不能被修改 int * const d = &f; //const 修饰的指针变量本身 const int * const e = &a; //指针所指向的内存空间和指针本身都不能被修改 return 0; }
合理的利用const,
//指针做函数参数,可以有效地提高代码可读性,减少bug;
//清楚的分清参数的输入和输出特性。
下列代码演示了const修饰的到底是指针本身还是指针变量。
#include <iostream> using namespace std; struct Teacher { char name[64]; int age; }; //指针所指向的内存空间,不能被修改 int operatorTeacher01( const Teacher * pT ) { //pT->age = 10; return 0; } //指针变量本身不能被修改 int operatorTeacher02( Teacher * const pT ) { pT->age = 10; //pT = NULL; return 0; } //指针变量本身和所指向的内存空间都不能被修改 int operatorTeacher03( const Teacher * const pT ) { //pT->age = 10; //pT = NULL; printf("age: %d", pT->age); return 0; } void main(void) { //const int a = 1; //int const b = 3; //一样的 //const int *c; //const修饰的是指针所指向的内存空间,不能被修改 //int * const d ; //const 修饰的是指针变量,不能修改 //const int * const e; //const 修饰的是指针所指向的内存空间和指针变量,都不能修改 cout <<"hello.."<<endl; Teacher t1; t1.age = 33; operatorTeacher03(&t1); system("pause"); }
C中的const关键字和C++中的const关键字:
C语言中的const是一个冒牌货:
C++语言中的const是一个真正的常量:
以下代码在C中运行的结果和C++中的运行结果不同,为什么?
下图为C中的运行结果:
下图为C++中的运行结果:
C++编译器对const进行了功能的加强,C++编译器看到常量,会把他放在符号表中,
当使用时直接在符号表中取值使用;
当对a变量取地址的时候,C++编译器会对a单独的开辟内存空间,
通过*p间接修改的地址不再是原来的地址,而是新开辟的内存空间,故修改的值和原来的值不相关。
新内存中的值如下:
结论:
C语言中的const常量
C语言中的const变量是只读变量,有自己的存储空间
C++中的const常量
可能分配存储空间,也可能不分配存储空间
当const常量为全局,并且需要在其它文件中使用时分配内存空间;
当使用&操作符取const常量的地址时分配内存空间。
#define和const的区别
const定义的变量,是由编译器处理的。提供类型检查和作用域检查
#include <iostream> #include <stdio.h> void fun1() { #define a 10 //a具有全局作用域 const int b = 20; //b具有局部作用域 //#undef a //取消a的全局作用域 //#undef //当只有一个a时,可以直接写#undef } void fun2() { printf("a = %d\n", a); //printf("b = %d\n", b); //b没有全局作用域 } int main(void) { fun1(); fun2(); return 0; }
欢迎加入作者的小圈子
扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并,获取更多隐藏干货,QQ交流群:859800032 微信公众号:Crystal软件学堂
作者:Liu_Jing bilibili视频教程地址:https://space.bilibili.com/5782182 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在转载文章页面给出原文连接。 如果你觉得文章对你有所帮助,烦请点个推荐,你的支持是我更文的动力。 文中若有错误,请您务必指出,感谢给予我建议并让我提高的你。 |