关于c/c++中传值,传引用,传值
每次声明一个变量(不包含static),变量都会有它的生命周期,当它被使用完毕(包含它的函数执行完成),走下一条语句的时候,变量的内存空间就被销毁了。
变量的作用范围,可以看作为,包含声明变量的最近的大括号所包含的范围,如果在该范围内有其他的大括号,而且该大括号内声明了一个同类型同名的变量,那么就相当于又开辟了一个新的内存空间,
来存储这个新的变量,变量名相同但是存储空间不同,是不等同的。
在将实参传入形参的时候,都是发生了一个声明且赋值的操作。 例如:add(int a,int b) 调用add(1,2) 时就发生了 int a=1,int b=2 这样的操作。
add(int a,int b)中a,b的作用范围就是这个函数的整个函数体,当这个函数调用结束,走其他的语句的时候a,b就被销毁了。
传值,就是将变量的值拷贝一份复制给参数列表中的形参,这之后就与原来的变量没有关系了。
传引用,就是对引用所绑定的对象进行操作,只要引用对应的对象没有被销毁,就可以一直使用。
传值,由于要先拷贝值,还要开辟新的内存空间,其效率比传引用要低许多。
指针和引用的区别:
-
引用在定义时必须初始化,指针没有要求
-
引用在初始化时引用一个实体后,就不能再引用其他实体而指针可以在任何时候指向任何,一个同类型实体
-
没有NULL引用,但有NULL指针
-
在sizeof中含义不同:引用结果为引用类型的大小,但指始终是地址空间所占字节个数(32位平台下占4个字节)
-
引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
-
有多级指针,但是没有多级引用
-
访问实体方式不同,指针需要显式解引用,引用编译器自己处理
-
引用比指针使用起来相对更安全
#include<iostream>
using namespace std;
int Add(int a, int b)
{
int c = a + b;
return c;
}
int main()
{
int ret=Add(1,2);
cout << "ret:" << ret << endl;
return 0;
}
这段代码的结果是一个随机地址
浙公网安备 33010602011771号