我们都知道形参和实参的区别,形参所在的函数为函数定义,实参为调用中的参数:
int Add(int a,int b){
int c = a + b;
return c;
}
int main(){
print("%d\n",Add(1,2));
//int c = Add(1,2);
}
上述的Add函数为传值形式,传值就会存在一个问题,即生命周期的问题,一般创建的局部变量出了作用域生命周期也就结束了,即c出了Add函数就会因为构成函数的栈帧的消失而消失,但是这个功能却能正常执行这时为什么呢?这时因为在Add函数即将结束的时候,main()函数内部创建了一个临时拷贝,拷贝了c的返回值,不然的话怎么改变实参的值呢?这样就出现一个问题,即产生了内存的消耗,创建了空间。
这时候就会有人说了使用指针啊,指针不会针对变量进行专门的拷贝啊,但是指针存在问题就是,指针的创建也会耗费内存空间,指针还需要对其存储的地址进行解引用才能返回一个数值。
这时候C++就引入了引用这个概念;引用只需在定义的时候进行初始化就行,不用操心内存开辟的问题,因为引用指向了被引用的对象自身没有创建空间,而且引用访问实体时候,是编译器自己处理的;指针需要显示解引用
但是引用和指针还是存在如下区别:
引用需要定义的时候初始化,而指针不需要
引用在引用一个实体之后,不能再引用其它实体了,而指针不存在这样的问题
没有NULL引用,而有NULL指针
再sizeof中含义不同,引用结果为引用类型的大小,指针始终是机器本身的地址空间所占字节个数
有多级指针,没有多级引用
引用自+1为实体值+1,而指针为偏移