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++ 引用与值传递的问题?的主要内容,如果未能解决你的问题,请参考以下文章

通过引用与值传递对象

引用传递与值传递

区别PHP引用传递与值传递的小例子

Java 参数传递与值传递

引用传递与值传递______深拷贝与浅拷贝______构造函数与析构函数

c/c++值传递和引用传递