[C con Clase] Dudas sobre el capítulo 15: parámetros por referencia

JoseL joselubar en gmail.com
Mar Ene 8 20:23:32 CET 2008


Hola, tengo un par de dudas relacionadas con los "parámetros por referencia" del capitulo 15.
Por ejemplo, en el código:

int main()
{
	int a = 3;
	int &r = a;
	int *p;
	int *q;
	p = &a;
	q = &r;
	
	cout << "3*3 = " << a + r + *p << endl;
	cout << Mas1Cuadrado(a) << " = (3+1)^2 = " << a << "^2" << endl;
	cout << Mas1Cubo(p) << " = (4+1)^2 = " << a << "^3" << endl;
			/*
			3*3 = 9
			16 = (3+1)^2 = 4^2
			125 = (4+1)^2 = 5^3
			*/
	return 0;
}

int Mas1Cuadrado(int &n)
{
	n++;
	return n * n;
}

int Mas1Cubo(int *q)
{
	++*q;
	return *q * *q * *q;
}

¿es p == q? es decir ¿son 'a' y 'r' la misma variable, la misma dirección de memoria, pero con distinto nombre, o bien son variables distintas, ocupando distintas direcciones de memoria, aunque tomen el mismo valor?

Y otra cuestión que me ronda ¿Para qué queremos las referencias si podemos hacer lo mismo con los punteros? me explico: ¿No da lo mismo hacer
	int &r = a 
y usar 'r' como referencia, que hacer 
	int *p;
	p = &a;
y usar *p ?

Es como si fuera lo mismo pero dado la vuelta, como las potencias y las raices. Y para manipular la variable 'a' ¿qué diferencia hay en la práctica pasarla por referencia, como en la función 'int Mas1Cuadrado(int &n)' o utilizar un puntero como en 'int Mas1Cubo(int *q)' ?


Más información sobre la lista de distribución Cconclase