在c语言中,我们已经学习并且能基本掌握指针的用法,在这里我就简单说一下引用的一些内容。
int a=10;
int &b=a;
在这里的&表示引用,且&必须紧跟着变量。
它和取地址的区别:若&前有类型,则为引用,若无,则为取地址。
刚开始学习引用,写的不是很熟练,有一个小窍门,例如:
int a=10;
要写引用,可以先写出它的指针;
int *b=&a;
然后用&覆盖*;
int &b=a;
引用的特点:
1.定义引用必须初始化;
2.初始化的值必须要能够取地址;
3.引用不能改变;例如:int &a=b;&a=c;这是错误的;
4.访问引用变量,永远访问的是它所引用的内存。
引用其实就是取别名。
const:
在c语言中:
1.const修饰的变量不是必须初始化;
2.修饰过后的变量不能再做数组的下标(说明是常变量而不是常量);
3.const修饰的常变量和普通常量的唯一区别是:常变量定义后,不能作为左值存在;
4.常变量,普通变量的编译方式一模一样。
在c++中:
1.const修饰的变量必须初始化;
2.修饰过后的变量可以作为数组的下标(说明是常量);
3.const的编译规则:所有使用常量名字的地方全部替换成常量的初始值;
4.该常量什么时候会退变成常变量?
引用一个编译阶段不明确的值的时候,例如:
int b=20;
const int a=b;
int arr[a]={0};
5.const修饰的变量,符号属性为local,属于当前文件可见,如果必须在其他文件使用,则在const常量定义处加extern,将符号属性改为global。
const修饰的量不能被修改(直接修改和间接修改(*和&))。
例如:const int b=10;
int &c=b;(这个是错误的)
const int &c=b(这是正确的)
这叫做常引用。
立即数要用常引用来引用,中间会产生临时量。
const和一级指针
不可改 可改
const int *p *p p
int const *p *p p
int * const p p *p
const int *const p *p,p
后边两个是常量,必须初始化。
int a=10;
const int *p=&a;
int *q=p;(这个代码是错误的)
q的类型:int *型,p的类型:const int *型。
普通指针不能赋给整型常量指针。
const int a=10;
int *p=&a;
const int *p=&a;
整型常量指针可以赋给普通指针。
const int q=10;
int *p=&a;
int &b=a;
这样会间接修改a的值,需要改成const int *p=&a;const int &b=a;
int a=10;
int *const p=&a;
int *q=p;
这代码是正确的,因为const没有修饰指针,所以不参与类型,是把int *类型赋给int *类型。
const int a=10;
int *const p=&a;
这里的const修饰指针,参与类型,是把const int *赋给int *。
例:
在0x0018ff44这块内存中写一个4字节的整数10.
int *p=(int *)0x0018ff44;
//0x0018ff44不能取地址,需要强转成地址
*p=10;
改为int * 的引用常量:
int * const &p=(int *)0x0018ff44;
//产生int const ptemp=(int *)0x0018ff44的临时量
//int *const &p=ptemp;
转载请注明原文地址: https://ju.6miu.com/read-676553.html