您的位置:首页 > 其它

typedef&引用&指针引用

2016-03-23 21:44 274 查看
typedef:声明新的类型名来代替原有的类型名,比如:

typedef int INTGER;


相当于用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 &[b]指向const int 合法 ,不可修改对象值[/b]

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

int &[b]指向 const int 不合法 [/b]

<>

特例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。下面来个 例子说明下:

<span style="font-size:12px;">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 指向第二个元素</span>


总结来说:

一般的传指针,那么都是复制一个指针,

如果想要使用原有的指针,就使用指针引用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: