English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
#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.
#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值相同的。