typedef&引用&指针引用 |
您所在的位置:网站首页 › 用typedef定义一个文件指针fp › typedef&引用&指针引用 |
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 |