Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Porque no es ncesario

Estas en el tema de Porque no es ncesario en el foro de C/C++ en Foros del Web. Hola! Una pregunta! Para pasar una variable por referencia en una función es necesario poner el símbolo * de esta forma funcion(int* variable) Pero por ...
  #1 (permalink)  
Antiguo 01/10/2010, 14:23
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 9 meses
Puntos: 0
Porque no es ncesario

Hola! Una pregunta!

Para pasar una variable por referencia en una función es necesario poner el símbolo * de esta forma funcion(int* variable)

Pero por qué un array no le pongo * en una función y se guardan los valores?
Nose si me explicao, me refiero a que parece que un array no necesita ponerle nada para que pase por referencia.


Un saludoo
  #2 (permalink)  
Antiguo 01/10/2010, 14:26
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 6 meses
Puntos: 2
Respuesta: Porque no es ncesario

un array tiene mucho parecido a un puntero, y basicamente lo que te interresa saber es que se pasa siempre por referencia
  #3 (permalink)  
Antiguo 01/10/2010, 14:26
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Porque no es ncesario

El nombre de un arreglo es un puntero constante al inicio de la memoria que ese arreglo ocupa.
  #4 (permalink)  
Antiguo 01/10/2010, 14:40
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Porque no es ncesario

entonces, un array, para pasarla como referencia, simplemente seria:

void funcion(int mivector[tamanio_vector]);

Por lo que veo en mi programa, con esto ya es suficiente para cuando cambias algo en la función de ese vector, se quda guardado.
¿Es correcto verdad?
  #5 (permalink)  
Antiguo 01/10/2010, 15:06
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Porque no es ncesario

Siempre que uses indices validos. Sino, un segmentation fault te visitará pronto.
  #6 (permalink)  
Antiguo 02/10/2010, 22:16
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Porque no es ncesario

bueno antes que nada, vamos a ir por partes, en C existes dos formas de pasar una variable, por referencia y por apuntador, C++ añade una mas que es por referencia.

la diferencia entre pasar una variable por apuntador y por referencia es:

1. para pasar una variable por referencia se utiza en la declaracion de la funcion &, y por puntero *, pasar un arreglo de elemento es pasar por punteros

ej

void prueba1(int *var);//paso por puntero, un arreglo tambien se puede pasar asi
void prueba2(int &var);// paso por referencia

int main{
int var;
prueba1(&var);
prueba2(var);
}
cuando es un puntero y tu añades & tu puedes modifcar la direccion del puntero, cosa que no seria posible si no lo utilizaras, ej

void prueba3(int *&puntero)
{
puntero = new int[20];
}

int main()
{
int *puntero = NULL;
prueba1(puntero3); // no se puede cambiar la direccion del puntero
prueba3(&puntero3);// es posible cambiar la direccion del puntero
}

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:11.