一:const专题:
在c语言中,const实际是一个冒牌货,例如,const int a=10;a是一个只读的常量,通过指针可以绕过去
在c+中,通过const 修饰的东西,会变成什么样子?
1.const int a=10;放入符号表里,始终从符号表里拿数据,a变成真正意义上的常量10
key | value |
a | 10 |
c++里面的符号表
1.通过代码来理解
const int a;
int const b;
const int *c;
int * const d;
const int * const e ;
含义:
//第一个第二个意思一样 代表一个常整形数
//第三个 c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改)
//第四个 d常指针(指针变量不能被修改,但是它所指向内存空间可以被修改)
//第五个 e一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改)
结论:
C语言中的const变量:
C语言中const变量是只读变量,有自己的存储空间
C++中的const常量:
可能分配存储空间,也可能不分配存储空间
当const常量为全局,并且需要在其它文件中使用
当使用&操作符取const常量的地址
符号表、编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间(兼容C)
例子代码: int main() { const int a = 10; int *p = (int*)&a; printf("a===>%d\n", a); *p = 11; printf("a===>%d\n", a); printf("Hello......\n"); return 0; } |
C++中的const常量类似于宏定义 const int c = 5; ≈ #define c 5 C++中的const常量在与宏定义不同 const常量是由编译器处理的,提供类型检查和作用域检查 宏定义由预处理器处理,单纯的文本替换 |
二.引用专题
1、 引用是C++的概念,属于C++编译器对C的扩展
int main()
{
int a = 0;
int &b = a; //int * const b = &a
b = 11; //*b = 11;
return 0;
}
2. 普通引用有自己的空间吗?//有
struct Teacer {
int &a;
int &b;
};
int main()
{
printf("sizeof(Teacher) %d\n", sizeof(Teacer));
system("pause");
return 0;
}
3.当实参传给形参引用的时候,只不过是c++编译器帮我们程序员手工取了一个实参地址,传给了形参引用(常量指针)