C和C++中const的区别,引用,一级指针和const组合

C语言标准
CC89 新(C99 inline const)
C++C++99 新(C++11,C++14)
const(const都不能为左值)
C中(C89):const int a = 10;    常变量
常变量不能当常量使用,如做数组下标。
C++中(C++99):const int a = 10;    常量,必须初始化
const编译时用常量替换,*(&a) 取地址解引用,编译器优化为a。
int c = 10;
const int a = c;初始化为变量,则a退化为常变量,同C中。

C和C++ const 的区别
编译时const的方式不同

引用(没有几级引用)
int a = 10;
int &b = a; 引用初始化,引用初始化后不能再引用其他内存。

  • 引用在汇编中相当于指针,同样开辟一个指针大小空间压入栈中,用于存储引用内存的地址。
  • 访问引用内存,直接解引用。
  • &b取引用地址访问不到b在栈区开辟的地址,访问的是a的地址。
  • C++11标准中有左值,右值引用。

int array[ ] = {1,2,3,4,5};
int (*p)[5] = &array;
int (&b)[5] = array;
sizeof(b) = sizeof(array) = 20
sizeof(p) = 4

char *array[ ] = {"hello","bbb","ccc"};
char *(*p)[3] = &array;
char *(&b)[3] = array;
sizeof(p) = 4 sizeof(b) = 12



const:编译器必须保证const修饰的值不能直接或间接被修改。
间接:打算把一个常量的地址放到一个普通的指针里面,就错了。
错误的转换:const int * => int *
const 修饰右边的 * 时,const参与类型。

const int &c = 10;
/* const int temp = 10;
 const int &c = temp; */



#include <typeinfo> 打印变量类型

重载的第三条:
看能不能通过修改形参,来影响实参的值。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值