Método de passagem de parâmetros de linguagem de programação
Tomando C++, Java, Python e JavaScript como exemplos para apresentar métodos de transferência de parâmetros de linguagem de programação
★Método de passagem de parâmetros em C++:
Passagem por valor: este é o método de passagem padrão para parâmetros de função C++. Neste caso, a função recebe uma cópia do valor do parâmetro, em vez do próprio parâmetro - o valor real do parâmetro é copiado no parâmetro formal. Portanto, quaisquer modificações nos parâmetros da função não afetarão os parâmetros originais.
Passagem por referência: Em C++, os parâmetros podem ser passados por referência. Neste caso, a função recebe uma referência ao parâmetro em vez de uma cópia do valor. Isso significa que qualquer modificação nos parâmetros da função afetará os parâmetros originais. Em C não há passagem por referência, mas um efeito semelhante pode ser alcançado com ponteiros.
Passagem por ponteiro: Em C++, os parâmetros podem ser passados por meio de ponteiros. Neste caso, a função recebe um ponteiro para o argumento. O valor do parâmetro original pode ser modificado através deste ponteiro dentro da função.
Exemplo:
#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;
}
Em linguagens de programação como Java, Python e JavaScript, a passagem de parâmetros é por valor, ou seja, é passada uma cópia do parâmetro.
★Método de passagem de parâmetros Java:
A única maneira de passar parâmetros em Java é por valor. Tanto os tipos de dados básicos quanto os tipos de referência são passados por valor. 1) Para tipos de dados básicos (como inteiros, números de ponto flutuante, valores booleanos, etc.), a função recebe uma cópia do valor e as modificações na cópia dentro do método (função) não afetarão o valor original. 2) Para tipos de referência (como objetos, arrays, etc.), a função recebe uma cópia da referência do objeto, ou seja, uma cópia do endereço. Isso significa que modificações na referência dentro do método (função) afetarão o objeto original.
Exemplo:
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
}
}
★Método de passagem de parâmetro Python:
Na verdade, o método de passagem de parâmetros em Python é unificado, e todos são passados por valor, e o que é passado é uma cópia do parâmetro. Em python, os parâmetros são passados por valor - uma cópia é passada. 1) Quando um tipo de dados básico (como número inteiro, número de ponto flutuante, valor booleano, etc.) é passado para uma função como parâmetro, uma cópia do valor é na verdade passada para a função. As modificações na cópia dentro da função não afetarão o valor original. 2) Quando um tipo de referência (como lista, dicionário, etc.) é passado para uma função como parâmetro, uma cópia da referência (endereço) do objeto é passada. Isto significa que modificações na referência dentro da função afetarão o objeto original.
Exemplo:
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
★ Métodos e características de passagem de parâmetros JavaScript:
Em JavaScript, os parâmetros são passados por valor – uma cópia é passada. 1) Quando um tipo de valor (como número, string, booleano, etc.) é passado para uma função como parâmetro, uma cópia do valor é na verdade passada para a função. As modificações na cópia dentro da função não afetarão o valor original. 2) Quando um tipo de referência (como um objeto, array, etc.) é passado para uma função como parâmetro, uma cópia da referência (endereço) do objeto é passada. Isto significa que modificações na referência dentro da função afetarão o objeto original, o que pode criar a ilusão de que o JavaScript é passado por referência.
Exemplo
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!