c++ 函数传指针 和引用有啥区别
int abc(int &a,int &b,int &c)...
传引用的话,是不是不用创建一个临时的对象(不用临时空间
而传指针的话 , 还要创建一个指针对象
百度查了查,都是抄来抄去的{:5_100:} 都要用临时空间吧,局部变量的作用域都是在创建它的那个函数的开始到结束 https://www.zhihu.com/question/37608201
视频中说引用的本质是常量指针 而传指针的话 , 还要创建一个指针对象
传指针也不需要创建对象,指针就是一个地址
函数运行时的时候,数据一般是放在栈里面的,等函数运行结束,栈会恢复原来的状态。也就是函数内的局部变量会作废。所以函数体内要改变函数外的数据,必定要告诉函数地址。因而引用也需要在函数调用前就需要开辟一临时空间用于存储地址。但64位代码和一些编译器也会把地址存入CPU的寄存器中而不是在内存中开辟一临时空间。其实在函数中计算机处理指针变量在这里和引用没什么区别 引用在绝大多数情况下都是用指针实现的
所以你可以认为对于编译后的源码,指针和引用没有任何区别 routty 发表于 2021-9-12 08:15
函数运行时的时候,数据一般是放在栈里面的,等函数运行结束,栈会恢复原来的状态。也就是函数内的局部变量 ...
原来你是个高手,深藏不露! 同{:10_256:}学 指针是一个地址,但是他的数据在栈里,在代码块结束后就会还原,不会对外面的数据造成影响, 2736946915 发表于 2021-9-13 21:06
指针是一个地址,但是他的数据在栈里,在代码块结束后就会还原,不会对外面的数据造成影响,
指针变量也不一定在栈区的 指针是一个地址,但是他的数据在栈里,在代码块结束后就会还原,不会对外面的数据造成影响,
引用是要创建对象的,传的也是一个地址,但是是对象的地址,数据是保存在堆区,会直接修改外面的值,
总结一下就是:
传指针为了临时用用,不想它对外面的数据改来改去,随便玩对外面数据不造成影响,
传引用能改变外面的数据,为了改变某个状态,某个变量之类的,不然数据改了后可能会导致其他地方出现BUG lhgzbxhz 发表于 2021-9-12 11:04
引用在绝大多数情况下都是用指针实现的
所以你可以认为对于编译后的源码,指针和引用没有任何区别
还是有区别的,一个栈区的生命怎么能和堆区比... routty 发表于 2021-9-13 21:07
指针变量也不一定在栈区的
那是静态变量,分配在堆上,这种情况很少,一般都会封装, 2736946915 发表于 2021-9-13 21:13
指针是一个地址,但是他的数据在栈里,在代码块结束后就会还原,不会对外面的数据造成影响,
引用是要创建 ...
?
#include <iostream>
void func(int *p) {
*p = 123;
}
int main() {
int a = 0;
printf("%d\n", a);
func(&a);
printf("%d\n", a);
return 0;
}
#include <iostream>
void func(const int &p) {
p = 123;
}
int main() {
int a = 0;
printf("%d\n", a);
func(a);
printf("%d\n", a);
return 0;
}
2736946915 发表于 2021-9-13 21:13
指针是一个地址,但是他的数据在栈里,在代码块结束后就会还原,不会对外面的数据造成影响,
引用是要创建 ...
全局指针变量,也不是随便用用的。应该说函数内的局部变量,包括局部指针变量,或形参是指针变量的那是在栈区,函数结束就会被作废 2736946915 发表于 2021-9-13 21:13
指针是一个地址,但是他的数据在栈里,在代码块结束后就会还原,不会对外面的数据造成影响,
引用是要创建 ...
指针和引用一样,都是一个地址,都不需要创建对象的
人造人 发表于 2021-9-13 21:35
指针和引用一样,都是一个地址,都不需要创建对象的
引用没有对象你引用谁?编译器都会直接报错 2736946915 发表于 2021-9-13 21:37
引用没有对象你引用谁?编译器都会直接报错
"引用" 引用的是已经存在的对象,不创建对象的
routty 发表于 2021-9-13 21:35
全局指针变量,也不是随便用用的。应该说函数内的局部变量,包括局部指针变量,或形参是指针变量的那是在 ...
全局的确实也是,但是极不推荐,这样做会害死其他人,让别人都不敢碰你代码,一般来说都会去写个接口函数,一为减少BUG,二为安全,别人破解也不会那么简单找到你的ECX, 人造人 发表于 2021-9-13 21:38
"引用" 引用的是已经存在的对象,不创建对象的
对,其实底层汇编以后处理方式和指针差不多,
页:
[1]
2