Procedimiento 1: paso de valor
#include<iostream>
#include<cstdio>
using namespace std;
void Exchg1(int x, int y)
{
int tmp;
tmp = x;
x = y;
y = tmp;
printf("x = %d, y = %d\n",x, y);
}
int main()
{
int a = 4, b = 6;
Exchg1(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
Se intercambió en Exchg1, pero no funcionó en la función principal.
Motivo: cuando se llama a la función, asigna implícitamente los valores de los parámetros reales a y b a x e y, y luego no se realizan más operaciones en a y b en el cuerpo de la función escrita. El intercambio es solo x, y variables. No a, b. Por supuesto, los valores de ayb no han cambiado. La función simplemente pasa los valores de a y b a x e y a través del valor pagado. La operación en la función es solo que los valores de x e y no son los valores de a y b. Esto se llama paso de valor.
Procedimiento 2: transferencia de dirección
#include<iostream>
#include<cstdio>
using namespace std;
void Exchg1(int *x, int *y)
{
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
printf("x = %d, y = %d\n",*x, *y);
}
int main()
{
int a = 4, b = 6;
Exchg1(&a, &b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
Para lograr el intercambio digital.
La operación de copia implícita de la función es dar las direcciones de a y b a x e y. Se puede ver que los valores de los punteros x e y son los valores de dirección de las variables ayb, respectivamente. A continuación, la operación en * x, * y es, por supuesto, la operación en las variables ayb.
Procedimiento 3: Pase por referencia
#include<iostream>
#include<cstdio>
using namespace std;
void Exchg1(int &x, int &y)
{
int tmp;
tmp = x;
x = y;
y = tmp;
printf("x = %d, y = %d\n",x, y);
}
int main()
{
int a = 4, b = 6;
Exchg1(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
Para lograr el intercambio digital.
x e y se refieren a las variables ayb respectivamente. De esta manera, la operación real de la función son los parámetros reales a, b en sí. En otras palabras, la función se puede modificar directamente al valor de a, b.
La diferencia entre el paso de valor y el paso de referencia:
1: diferente en el formato de definición de funciones.
2: el mismo formato cuando se llama.
3: La función es diferente. (Una operación no es la variable en sí, una es en sí misma)