const,引用以及指针(一)

    xiaoxiao2021-08-17  121

    在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

    最新回复(0)