typedef&引用&指针引用

您所在的位置:网站首页 用typedef定义一个文件指针fp typedef&引用&指针引用

typedef&引用&指针引用

2023-07-28 05:40| 来源: 网络整理| 查看: 265

typedef:声明新的类型名来代替原有的类型名,比如:

typedef int INTEGER;

相当于用INTGER来代表int类型,习惯上把用typedef声明的类型用大写字母表示。

引用:

引用说白了就是为对象另外起了一个名字,定义了一个引用之后所有的操作都是在引用绑定的对象上进行的。

定义方式: 将声明符写成&d的形式来定义引用类型其中d是声明的变量名,

int size = 100;

int &sum = size;

要注意的是我们在引用的时候必须要给引用赋值,出生即绑定,像直接int &size 这种方式是不可以的。

那么问题来了:我们可不可以定义引用的引用呢?答案当然是不可以了,为什么呢?因为我们说引用只是给对象起了个另外的名字,引用并不是一个对象,所以我们不能这么做。另外,我们可以给一个对象绑定多个引用。

另外,值的注意的是:其他所有类型的引用和要绑定的对象都要严格匹配,另外,引用只能绑定到对象上,而不能绑定到字面值或者某个表达式的计算结果上。但是对于常量引用,这条法则不适用,详细见之后处:

常量引用:

int a=1;

const int &t1= a;

const int a=1;

const int &t2= a;

这里的t1,t2都是常量引用。

关于常量引用相关的例子:

int ai=10;

const int ci= 100;

const int &si= ai;//正确的,常量引用可以指向非常量对象

const int &r1 = ci;  //正确的,引用及对象都是常量

r1 = 11 //这是错误的,因为r1是常量引用,不能修改它所绑定的对象的值

int &r2 = ci //这是错误的,不能让一个非常量引用指向一个常量对象,因为非常量引用意味着可以修改对象的值;对象本身是常量,不能更改,所以矛盾。

总结:

const int &指向int    合法 ,不可修改对象值

const int &指向const int     合法 ,不可修改对象值

int&指向 int     合法,可修改对象值

int &指向 const int       不合法 

特例1:在初始化常量引用时允许使用任意表达式作为初始值,只要该表达式的结果最终能转化为引用的类型就行了。

特例2:允许为一个常量引用绑定非常量的对象,字面值甚至一个一般表达式。即const int &p=100;和const int &p=a+b;合法。

指针引用

数据结构教材实例:

List  *&p 等价于 List*  &L 。List*  表示 一个指针类型的List结构,&L表示一个引用,而且是一个指针引用。List *L  是 一个List类型的指针。二者使用的区别:在传递的函数参数是指针类型的话,那么编译器会复制一个指针,那么我们在函数内部使用的指针就是复制 之后的指针,而不是原来的指针了。如果需要使用原来的指针 ,则需要传递指针引用。即:List *&L,那么我们在函数 内部操作的指针 还是 原来传过来的指针对象,也就是说:如果要对这个指针的本身进行操作和改变其内容,就必须使用引用(List *&p),而如果只是为了用它间接访问的功能(*p)就可以直接传List *p。下面来个 例子说明下:

void function_1( int *p) { p++;//复制的指针变化,原指针不变 } void function_2(int *&p) { p++; } int a[100]; int *p = a; function(p); // p指向第一个元素 function_2(p); //p 指向第二个元素

总结来说: 一般的传指针,那么都是复制一个指针, 如果想要使用原有的指针,就使用指针引用


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3