English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Punteros y funciones

En este artículo, aprenderá a pasar punteros como parámetros de una función y a usarlos efectivamente en el programa.

enC ++funciónEn el artículo, se conoció sobre la transmisión de parámetros a una función. Porque se pasaron valores reales, este método se llama paso por valor.

Pero, hay otra manera de pasar parámetros a una función, en la que no se pasa el valor real de los parámetros. En su lugar, solo se pasa una referencia a ese valor.

Ejemplo1:pasaje de referencias sin punteros

#include <iostream>
using namespace std;
// 原型 de la función
void swap(int&, int&);
int main()
{
    int a = 11, b = 22;
    cout << "Antes del intercambio" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    swap(a, b);
    cout << "\nDespués del intercambio" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    return 0;
}
void swap(int& n1, int& n2) {
    int temp;
    temp = n1;
    n1 = n2;
    n2 = temp;
}

Resultados de la salida

Antes del intercambio
a = 11
b = 22
Después del intercambio
a = 22
b = 11

en la función main(), se definieron dos variables enteras a y b. Estas variables enteras se pasan a la función swap() por referencia.

el compilador puede identificar que se transmite por referencia, porque la definición de la función es void swap(int& n1, int& n2) (por favor, tenga en cuenta el tipo de datos después de&símbolo).

en la función swap() solo recibe las referencias (direcciones) de las variables a y b, y el intercambio ocurre en la dirección original de la variable.

en la función swap()1和n2es un parámetro de forma, que es realmente el mismo que las variables a y b.

Hay otra forma de usarpunterosmétodos para completar la misma tarea.

Ejemplo2:usar punteros para pasar referencias

#include <iostream>
using namespace std;
// 原型 de la función
void swap(int*, int*);
int main()
{
    int a = 1, b = 2;
    cout << "Antes del intercambio" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    swap(&a, &b);
    cout << "\nDespués del intercambio" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    return 0;
}
void swap(int* n1, int* n2) {
    int temp;
    temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

La salida de este ejemplo es la misma que el resultado de la salida anterior.

En este caso, la dirección de la variable se transmite durante la llamada a la función, no la variable en sí.

swap(&a, &b); // &a是a的地址,&b是b的地址

由于传递的是地址而不是值,因此必须使用解引用运算符来访问存储在该地址中的值。

void swap(int* n1, int* n2) { 
 ... .. ...
}

* n1和* n2分别给出存储在地址n1和n2处的值。

由于n1包含a的地址,因此对* n1所做的任何事情也会改变main()函数中a的值。 类似地,b将具有与* n2值相同的。