编程语言参数传递方式

编程语言参数传递方式

以C++、Java、Python、JavaScript语言为例,介绍编程语言参数传递方式

★C++中参数传递方式:

按值传递(Pass by Value):这是C++函数参数的默认传递方式。在这种情况下,函数接收的是参数值的一个副本,而不是参数本身——实参的值会被复制到形参中。因此,函数内对参数的任何修改都不会影响原始参数。

按引用传递(Pass by Reference):在C++中,可以通过引用来传递参数。这种情况下,函数接收的是参数的引用,而不是值的副本。这意味着函数内对参数的任何修改都会影响到原始参数。在C语言中,没有按引用传递,但可以通过指针实现类似的效果。

按指针传递(Pass by Pointer): C++中,可以通过指针来传递参数。在这种情况下,函数接收的是指向参数的指针。函数内可以通过该指针修改原始参数的值。

示例:

#include <iostream>
using namespace std;

void passByValue(int num) {
    num = 10;  // 修改形参的值
}

void passByReference(int& num) {
    num = 10;  // 修改原始参数的值
}

int main() {
    int num1 = 5;
    int num2 = 5;

    passByValue(num1);
    cout << "After passByValue, num1 = " << num1 << endl;  // 输出 5

    passByReference(num2);
    cout << "After passByReference, num2 = " << num2 << endl;  // 输出 10

    return 0;
}

在 Java、Python 和 JavaScript 等编程语言中,参数传递方式都是按值传递,即传递的是参数的副本。

★Java参数传递方式:

Java 中的参数传递方式只有按值传递。无论是基本数据类型还是引用类型,都是按值传递。 1)对于基本数据类型(如整数、浮点数、布尔值等),函数接收的是该值的副本,方法(函数)内部对副本的修改不会影响到原始的值。 2)对于引用类型(如对象、数组等),函数接收的是对象引用的副本,也就是地址的副本。这意味着方法(函数)内部对引用的修改会影响到原始的对象。

示例:

public class demoA {

    public static void passByValue(int num) {
        num = 10;  // 修改形参的值
    }

    public static void passByReference(int[] arr) {
        arr[0] = 10;  // 修改原始参数的值
    }

    public static void main(String[] args) {
        int num1 = 5;
        int[] arr = {5};

        passByValue(num1);
        System.out.println("After passByValue, num1 = " + num1);  // 输出 5

        passByReference(arr);
        System.out.println("After passByReference, arr[0] = " + arr[0]);  // 输出 10
    }
}

★Python参数传递方式:

实际上 Python 中的参数传递方式是统一的,都是按照值传递进行的,传递的是参数的副本。在python中,参数传递方式是按值传递——传递的是副本。1)当将一个基本数据类型(如整数、浮点数、布尔值等)作为参数传递给函数时,实际上是将该值的一个副本传递给函数。函数内部对该副本的修改不会影响到原始的值。2)当将一个引用类型(如列表、字典等)作为参数传递给函数时,传递的是该对象的引用(地址)的副本。这意味着函数内部对该引用的修改将会影响到原始的对象。

示例:

def pass_by_value(num):
    num = 10  # 修改形参的值

def pass_by_reference(arr):
    arr[0] = 10  # 修改原始参数的值

num1 = 5
arr = [5]

pass_by_value(num1)
print("After pass_by_value, num1 =", num1)  # 输出 5

pass_by_reference(arr)
print("After pass_by_reference, arr[0] =", arr[0])  # 输出 10

★JavaScript参数传递方式及特点:

在 JavaScript中,参数传递方式是按值传递——传递的是副本。1)当将一个值类型(如数字、字符串、布尔值等)作为参数传递给函数时,实际上是将该值的一个副本传递给函数。函数内部对该副本的修改不会影响到原始的值。2)当将一个引用类型(如对象、数组等)作为参数传递给函数时,传递的是该对象的引用(地址)的副本。这意味着函数内部对该引用的修改将会影响到原始的对象,这可能会产生一种错觉,让人误以为 JavaScript 是按引用传递的。

示例

function passByValue(num) {
    num = 10;  // 修改形参的值
}

function passByReference(obj) {
    obj.name = "John";  // 修改原始参数的属性值
}

let num1 = 5;
let obj = { name: "Alice" };

passByValue(num1);
console.log("After passByValue, num1 =", num1);  // 输出 5

passByReference(obj);
console.log("After passByReference, obj.name =", obj.name);  // 输出 "John"

OK!

猜你喜欢

转载自blog.csdn.net/cnds123/article/details/132981086