引用&指针
引用语法:
int &b = a;
引用是已定义变量的别名,不需分配内存空间。
指针是一个实体,需要分配内存空间。
1.注意事项:
1.引用在定义的时候必须进行初始化。|指针在定义的实时不一定要初始化。
2.引用初始化后不能改变引用。|指针指向的空间可变。
3.有多级指针,但是没有多级引用,只能有一级引用。
4.引用作为参数时,传引用的实质是传地址,传递的是变量的地址;
指针作为参数时,传指针的实质是传值,传递的是指针的地址。
5.sizeof引用得到的是所指向的变量(对象)的大小。
sizeof指针得到的是指针本身的大小,就是4。
6.引用的自增运算是变量值加1,指针的自增运算是指向下一个空间。
2.参数传递过程
1.引用参数传递本质是地址传递,传递的是实参的地址,被调函数的形参作为局部变量在栈中开辟了内存空间来存放的是实参的地址。被调函数对形参(本体)的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量(根据别名找到主调函数中的本体)。因此,被调函数对形参的任何操作都会影响主调函数中的实参变量。
2.指针参数传递本质是值传递,传递的是指针的地址值。被调函数的形参作为局部变量在栈中开辟内存空间来存放主调函数传递进来的实参值。形成实参的一个副本。因而被调函数对形参的任何操作都是作为局部变量进行的,不会影响主调函数的实参的值。
引用传递和指针传递虽然都是在被调函数栈空间上的一个局部变量,但是对于引用参数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变量。而对于指针传递的参数,如果改变被调函数中的指针地址,它将应用不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数中的相关变量(地址),那就得使用指向指针的指针或者指针引用。