博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
值传递,引用传递,指针传递
阅读量:4695 次
发布时间:2019-06-09

本文共 1621 字,大约阅读时间需要 5 分钟。

这三者就看你函数参数到底是一个普通变量还是引用还是一个指针

我看了一个博主的讲的不错

传送门:

上面已经解释了这三者的一些特点,我接下来就讲讲这三者什么时候用

这取决于你的目的

 

1.如果你不想改变实参的值,而只是在函数里对形参进行修改就用值传递

形参是实参的拷贝,改变形参的值并不会影响外部实参的值

 

2.如果你想主函数的值和在被调函数里的修改的值同步修改就指针传递

形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作

它不需要拷贝那么多数据,当然引用传递也可以,但二者还是有区别的

指针是一个实体(替身);引用只是一个别名(本体的另一个名字)

  引用只能在定义时被初始化一次,之后不可改变,即“从一而终”;指针可以修改,即“见异思迁”;

  引用不能为空(有本体,才有别名);指针可以为空;

  sizeof 引用,得到的是所指向变量的大小;sizeof 指针,得到的是指针的大小;

  指针 ++,是指指针的地址自增;引用++是指所指变量自增;

  引用是类型安全的,引用过程会进行类型检查;指针不会进行安全检查;

1 #include
2 using namespace std; 3 4 void f1(int x) 5 { 6 cout << &x << " " << x << endl; 7 x++; 8 } 9 10 void f2(int &x)11 {12 cout << &x << " " << x << endl;13 x++;14 }15 16 void f3(int *x)17 {18 cout << x << " " << *x << endl;19 *x = *x + 1; 20 }21 22 int main()23 {24 int a = 110;25 cout << "Actual address--" << &a << " " << a << endl;26 27 f1(a);28 cout << "Actual address--" << &a << " " << a << endl;29 30 f2(a);31 cout << "Actual address--" << &a << " " << a << endl;32 33 f3(&a);34 cout << "Actual address--" << &a << " " << a << endl;35 36 return 0;37 }
View Code

还有就是如果要传递参数包含的东西比较多的话,可以用指针传递。因为这个时候只需拷贝一个地址减少内存空间消耗

然后如果你不想修改的话,可以用const修饰

1 #include
2 using namespace std; 3 struct stu{ 4 string name; 5 int age,score; 6 }; 7 8 void print(const stu *s) 9 {10 //s->age = 99;是不允许的,因为s是一个指向常量的指针 11 cout << s->name << " " << s->age << " " << s->score << endl;12 }13 int main()14 {15 stu s = {
"Steve",50,99};16 print(&s);17 return 0;18 }

 

转载于:https://www.cnblogs.com/mch5201314/p/11573122.html

你可能感兴趣的文章
vim代码格式化插件clang-format
查看>>
RTP Payload Format for Transport of MPEG-4 Elementary Streams over http
查看>>
Java环境变量设置
查看>>
【JBPM4】判断节点decision 方法3 handler
查看>>
filter 过滤器(监听)
查看>>
node启动时, listen EADDRINUSE 报错;
查看>>
杭电3466————DP之01背包(对状态转移方程的更新理解)
查看>>
kafka中的消费组
查看>>
python--注释
查看>>
SQL case when else
查看>>
SYS_CONTEXT 详细用法
查看>>
Pycharm配置autopep8让Python代码更符合pep8规范
查看>>
我的第一篇博客
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
C#垃圾回收机制
查看>>
31、任务三十一——表单联动
查看>>
python之hasattr、getattr和setattr函数
查看>>
maven使用阿里镜像配置文件
查看>>
Copy code from eclipse to word, save syntax.
查看>>
arguments.callee的作用及替换方案
查看>>