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

Duda en C: función con parámetros por referencia.

Estas en el tema de Duda en C: función con parámetros por referencia. en el foro de C/C++ en Foros del Web. Tengo el libro fundamentos de programación: piensa en C, y estoy leyendo el capítulo 4: funciones, pero en el subtema parámetros por referencia no he ...
  #1 (permalink)  
Antiguo 16/08/2012, 22:52
 
Fecha de Ingreso: julio-2009
Mensajes: 26
Antigüedad: 14 años, 9 meses
Puntos: 0
Pregunta Duda en C: función con parámetros por referencia.

Tengo el libro fundamentos de programación: piensa en C, y estoy leyendo el capítulo 4: funciones, pero en el subtema parámetros por referencia no he logrado entender el siguiente programa que muestra el resultado que debe generar, solo que no he logrado que el mismo resultado, espero que alguien me pueda explicar, el programa es el siguiente:

#include<stdio.h>

int a, b, c, d; //variables globales

void funcion1 ( int, int *, int *); //prototipo de función

int funcion2 (int *, int); //prototipo de función

void main()

{

int a=1; //variable local de main

b=2; //variable global

c=3; //variable global

d=4; //variable global

printf("\n %d %d %d %d", a, b, c, d);

a=funcion2(&a, c); //se llama a la funcion2 que manda a llamar a la funcion1

//el valor de a es el valor que retorna la funcion2 y se imprime aquí:

printf("\n %d %d %d %d", a, b, c, d);

}



void funcion1 (int r, int *b, int *c)

{

int d;

a = *c;

d = a + 3 + *b;

if (r)

{

*b = *b + 2;

*c = *c + 3;

printf("\n %d %d %d %d", a, *b, *c, d);

}

else

{

*b = *b + 5;

*c = *c + 4;

printf("\n %d %d %d %d", a, *b, *c, d);

}



int funcion2 (int *d, int c)

{

int b;

a = 1;

b = 7;

funcion1( -1, d, &b);

printf("\n %d %d %d %d", a, b, c, *d);

c += 3;

(*d) += 2;

printf("\n %d %d %d %d", a, b, c, *d);

return (c);

}

El resultado del libro es el siguiente:

1 2 3 4

7 3 10 11

7 10 3 3

7 10 6 5

6 2 3 4



Y pues aún no he logrado obtener el mismo resultado que el libro,

espero que me puedan al menos dar sugerencias, o comentarme

sobre un buen libro o manual sobre este tema para seguir investigando.
  #2 (permalink)  
Antiguo 17/08/2012, 01:57
 
Fecha de Ingreso: agosto-2012
Mensajes: 30
Antigüedad: 11 años, 8 meses
Puntos: 3
Respuesta: Duda en C: función con parámetros por referencia.

Hola

dale un vistazo a este link

http://www.uv.es/eees/archivo/PON-C-13.pdf

Es sobre punteros dobles. Tambien se explica el paso de parametros por referencia.


Espero que te sirva
  #3 (permalink)  
Antiguo 17/08/2012, 06:30
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Duda en C: función con parámetros por referencia.

Hola feivelfabiola.

Copié y probé el ejemplo de tu mensaje. Y si bién tuve que agregarle una llave ( '}'), que supongo fue una omisión al escribir, obtengo el mismo resultado que te dá el libro. Ese código está precisamente para que hagas una traza (prueba de escritorio) y entiendas la diferencia entre parámetros o por valor o referencia.

Básicamente, cuando le se pasa a una función un parámetro por valor, la función crea una copia local del argumento, por lo que las modificaciones que se hagan dentro de la función no alteran el valor de la variable enviada, también permite enviar una constante. Ejemplo:
Código C:
Ver original
  1. void func(int v) {
  2.   v = 0;
  3. }
  4.  
  5. int main() {
  6.   int x = 5;
  7.   func(x);
  8.   printf("%d",x); // muestra 5
  9.   ...
  10.   func(11); // permite una constante
  11. }

Cuando se le pasa a una función un parámetro por referencia, se envía la dirección de la variable y no su contenido, por lo que cualquier cambio que se realize dentro de la función altera su valor, lógicamente no permite enviar una constante. Ejemplo:

Código C:
Ver original
  1. void func(int *v) {
  2.   *v = 0;
  3. }
  4.  
  5. int main() {
  6.   int x = 5;
  7.   func(&x);
  8.   printf("%d",x); // muestra 0
  9.   ...
  10. }

Saludos.
  #4 (permalink)  
Antiguo 17/08/2012, 16:23
 
Fecha de Ingreso: julio-2009
Mensajes: 26
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Duda en C: función con parámetros por referencia.

Gracias por las respuestas, y si me faltó cerrar con } la funcion1 (error por omisión). Antes de cerrar el tema tengo una última duda que pasa cuando se escriben estos dos símbolos juntos: &* o cuando se escribe *& antes de una variable??
  #5 (permalink)  
Antiguo 20/08/2012, 00:50
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Duda en C: función con parámetros por referencia.

Hola feivelfabiola.

El operador & devuelve la dirección de un objeto que reside en memoria (no de constantes, expresiones o variables de tipo register).
Cuando se aplica el operador * a un apuntador, devuelve el contenido del objeto al que apunta.

Por lo tanto cuando usas *& estas indicando que devuelva el contenido de lo apuntado.

Proba este código:
Código C:
Ver original
  1. #include <stdio.h>
  2. int main() {
  3. int i = 50;
  4.   printf("Al final %d era igual a %d !", i, *&i);
  5.   getchar();
  6.   return 0;
  7. }


Saludos.
  #6 (permalink)  
Antiguo 20/08/2012, 15:14
 
Fecha de Ingreso: julio-2009
Mensajes: 26
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Duda en C: función con parámetros por referencia.

OK, gracias, entonces es igual *&d que solo escribir d.

Etiquetas: funcion, int, programa, variables
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 12:21.