C/Visual C - EStoy aprendiendo c++ y no se ke es esto, expliken

 
Vista:

EStoy aprendiendo c++ y no se ke es esto, expliken

Publicado por jsoe morales (16 intervenciones) el 04/05/2005 22:33:44
hola estoy aprendiendo c++, y toy ahorita viendo lo de punteros, y al parecer voy bien, pero me tope con una cosa ke no entiendo, alguien me lo puede explicar, es el siguiente programa,
#include <iostream.h>

float &componente(float *v, int k);

int main(){

float v[5];

for(int k=1;k<=5;k++)
componente(v,k)=1.0/k;

for(int i=0;i<5;i++)
cout<<"v["<<i<<"] = "<<v[i]<<endl;

return 0;
}

float &componente(float *v, int k)
{
return v[k-1];
}

osea a todo le enteindo, menos a la funcion, osea PK TIENE UN AMPERSON "&" ???, Y le esta asignando un valor, k onda con eso??, se supone ke las funcioens solo regresan valores no? o tambien se les pueeden asignar valores, lo unico ke pienso, eske a lo mejor, el & hace ke se asigne el valor a donde apunta lafuncion, no nose la vdd AYUDA!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:EStoy aprendiendo c++ y no se ke es esto, expli

Publicado por fernando.gomez (1603 intervenciones) el 05/05/2005 01:22:11
Ok, primer punto. El & en una variable significa que es una referencia. En C++, las referencias son "parecidas" en funcionalidad a los punteros. Es decir, que el valor que te regrese componente(), en lugar de copiar el valor float devuelto, te devuelve la referencia a esa variable.

Ahora, lo que pasa es que tienes un problema de semántica. El & no opera sobre la función, sino que es parte del tipo de dato devuelto. Por ello, para claridad, yo escribiría la función así:

float& componente(float *v, int k);

para recalcar que lo que va a regresar es una referencia a un número de punto flotante.

Ahora, como la función te regresa una referencia a una variable, es perféctamente válido asignarle un valor como en tu ejemplo. Es decir, a la variable devuelta por componente() se le asigna un nuevo valor. Aunque no es muy legible, es válido. Sería el equivalente a hacer algo como:

float f;
f = componente(v, k);
f = 1.0 / k;

Salutes.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar