对const和引用的新理解
来源:互联网 发布:淘宝淘宝客怎么开通 编辑:程序博客网 时间:2024/05/22 00:21
一:const专题:
在c语言中,const实际是一个冒牌货,例如,const int a=10;a是一个只读的常量,通过指针可以绕过去
在c+中,通过const 修饰的东西,会变成什么样子?
1.const int a=10;放入符号表里,始终从符号表里拿数据,a变成真正意义上的常量10
keyvaluea10c++里面的符号表
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++编译器帮我们程序员手工取了一个实参地址,传给了形参引用(常量指针)
- 对const和引用的新理解
- C--我对指针和引用const之后的理解
- 对const和static的理解
- 对const的理解
- 对const的理解
- 对指针和引用的理解
- 对const使用的理解
- 对const使用的理解
- 对const关键字的理解
- 对const关键字的理解
- 对const关键字的理解
- 对const关键字的理解
- 深刻理解引用、const引用、右值引用的本质
- const对象和const函数的用法限制以及对const成员变量或引用的初始化问题
- 引用和const的关系
- const的指针和引用
- 引用和const引用的区别
- 引用和const引用的区别
- shell初识—2
- Python3中append与extend的区别
- Java I/O机制总结
- solr服务器安装在linux上面的时候出现there exists no core with name index异常
- 一切都会好起来的
- 对const和引用的新理解
- linux系统中如何进入退出vim编辑器,方法及区别
- 大数据技术之Java基础
- Android HandlerThread总结使用
- python初学_2
- 中断后半段处理,tasklet使用机制与工作队列
- MySQL基础(9)——游标、触发器和事务处理
- 设计模式—工厂模式
- c++学习笔记 内存四区 函数调用模型 指针强化