引用,指针,常引用,常指针

来源:互联网 发布:纯粹理性批判 知乎 编辑:程序博客网 时间:2024/04/29 12:06

问题从这样一个定义式开始:
const char * const &a

一、什么是独立引用:
定义中用到&是独立引用.
比如:
char i;
char &a=i; (&独立引用时,必须为变量赋初值,&修饰"="号的左值)
引用一般不分配空间,它只是对一个空间多重命名,所以引用前加const 表示只引用值,不可修改空间内的值
表示a是i的一个单独引用.
当有i='a'时,也有a='a';
当有a='c'时,也有i='c';
两个变量的标示符都代表同一个内存空间地址.

二、指针的声明:
定义中,用到*是指针的声明
比如:
char i;
char *p=&i;(&在这里修饰的是右值,是取址符.即取得i的地址,赋值给p)
这两个定义表示,p是指向i的指针.
当有*p='a' 时,有i='a';
当有i='i'时,有*p='i';
p和&i,都指向同一个地址


三、常量
声明中带有const时,表示为常量.
常量即不能作为左值的量,定义式中赋初值除外。
如:
对于常数据类型:
const char a='a';(一定要赋初值)
char i=a;(常量可以作为右值)
a='i';(这句出错,常量不可以作为左值,常量不能改变值)
对于指针类型:
const char *p=&a;(*p被认为是常量,程序中不许*p='d')
char *const p=&a;(p被认为是常量,程序中不许p=&k)

对于引用:
const char &p=a;(p及其引用值被认为常量,p=k不合法)
char &const p=a;(p被认为常量,但其值可以改变 p=k合法)

 

四、那个难懂的定义式的理解!!
const char* const &a=&i;(从上面的文章中,应该知道常量要赋初值.)

对上式从右读起:
1、const &a表示a为常量,一开始要对其赋值,先假设const &a=k;
这里赋予k,表示a是k的一个单独引用.且在以后的程序中,不能对a引用的值进行修改,即不能作为“=”号左值。

const char * const &a 此时可以看成 const char *k=&i;
是在const &a的基础上声明:const char *k,即定义了一个指针k指向内存i.且k不能改变i的值。
即*k='d'是不合法的。而a是k的引用。所以a也是指向i的指针.
所以整个声明可以理解为:a 是&i的一个别名,且不能利用(*a)来修改i的值.

原创粉丝点击