C/C++ 引用与值传递的问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++ 引用与值传递的问题?相关的知识,希望对你有一定的参考价值。
String 的相加函数operate + 的实现如下:
String operate+(const String &s1, const String &s2)
String temp;
delete temp.data; // temp.data 是仅含‘\0’的字符串
temp.data = new char[strlen(s1.data) + strlen(s2.data) +1];
strcpy(temp.data, s1.data);
strcat(temp.data, s2.data);
return temp;
对于相加函数,应当用“值传递”的方式返回String 对象。如果改用“引用传递”,
那么函数返回值是一个指向局部对象temp 的“引用”。由于temp 在函数结束时被自动
销毁,将导致返回的“引用”无效。例如:
Q:为什么说引用返回被销毁无效
我下面的代码可以返回啊
int &fun()
int b = 10;
int &a = b;
return a;
int main()
int a = 0;
a = fun();
cout<<a<<endl;
return 0;
这个例子貌似也是值传递,int &fun()返回的是a所参考的那个实值,也就是b的值.
引用传递的例子我也不清楚怎么举,但我想下面的就应该是不对的.
int main()
int& a;
a = fun();
cout<<a<<endl;
return 0;
参考技术A 骚年 你在main函数里申明了int a,a=fun();此时a是作为左值被赋值而不是你想象中的引用传递效果,要想实现引用传递效果a就要申明为int&类型,而int&再申明后就必须要初始化才能使用
Java 参数传递与值传递
参考:https://blog.csdn.net/zhenge1990/article/details/78897166
java方法参数的传递有两种,值传递和引用传递。
1.按值传递:
参数类型是int,long等八大基本数据类型时,参数传递的过程是按值拷贝的过程
如下代码
public static void main(String[] args) { int a = 5; fun(a); System.out.println(a);// 输出结果为5 } private static void fun(int a) { a += 1; }
2.按引用传递
参数类型为引用类型,参数传递的过程采用拷贝引用的方式
public class Test { public static void main(String[] args) { A a = new A(5); fun(a); System.out.println(a.a);// 输出结果为6 } private static void fun(A a) { a.a += 1; } static class A { public int a; public A(int a) { this.a = a; } } }
再看下面这种情况:
public class Test { public static void main(String[] args) { Integer a = 5; fun(a); System.out.println(a);// 输出结果为5 } private static void fun(Integer a) { a += 1; } }
这里明明是引用传递,为什么没有改变对象的值呢?
这里其实使用了基本数据类型封装类的自动装箱功能。
Integer a = 5,编译后实际为Integer a = Integer.valueOf(5),查看Integer的源码,并没有改变原对象的值,只是将其引用指向了另一个对象。
以上是关于C/C++ 引用与值传递的问题?的主要内容,如果未能解决你的问题,请参考以下文章