Discussion:
ayuda con paso por referencia
(demasiado antiguo para responder)
zirildian
2004-04-16 11:02:29 UTC
Permalink
hola a todos,soy nuevo por aqui, y nuevo en c tengo una duda acerca de como
pasar variables por referencia en las funciones.

#include <stdio.h>

int funcion(int,int);
void main(){
int a, x=10,y=20;
a=funcion(x,y);
printf("%d %d %d",a,x,y);
}

int funcion(int n,int m){
int v;
n++;
m++;
v=n+m;
return v;
}

el paso tiene que ser por referencia para actualizar los originales , y
poderlos usar.
el borland me da fallo.
gracias por adelantado
eolith[nO_Spam]
2004-04-16 12:46:01 UTC
Permalink
Vayamos por partes:

Primero, la función main, haz que devuelva int para que se adapte al
estándar ANSI y sea un programa portable, es decir
int main() {
/*aqui tu programa*/
return 0; /* valor devuelto por el main, indica ejecución OK */
}
Post by zirildian
int funcion(int,int);
No parece que diga mucho sobre lo que hace la función, usa nombres más
especificos, y mejor pon el nombre de las vars. para saber cual es cada
una en caso de que sea importante. (en este caso el nombre de la función
parece que da igual, como solo hay una)
Por ejemplo:
int LoQueHaceLaFuncion(int n,int m);

Y si lo que quieres es modificar el contenido de las variables, no pases
el valor, sino pasa la dirección de esas variables. Si pasas una
variable no pasas en realidad esa variable, sino el valor de la
variable. Pasa un puntero a cada variable que quieras modificar. Por
ejemplo, como quieres modificar 2 vars. int, pasa a la función dos
punteros a enteros:

int funcion(int*,int*);

Usándola así:

a=funcion(&x,&y);

El & (ampersand) es un operador que para que te acuerdes quiere decir
"dirección de...", es decir al poner &x no pasas el valor de x sino la
dirección de la var. x, es decir un puntero a x.

Luego dentro de la función:

int funcion(int* x,int* y) {
(*x)++;
(*y)++;
return (*x)+(*y); /*los paréntesis hacen que quede más claro */
}

De esta forma la función modificará el valor de x y de y.
Se usa el operador * para "desreferenciar", para acordarte imagínate que
quiere decir "el contenido de la dirección a la que apunta..."

Hasta otra.
Mikel Irazabal
2004-04-16 13:01:50 UTC
Permalink
Un comentario sin importancia:

En el post inicial Zirildian pedía saber cómo hacerlo con referencias, y
tú lo has hecho con punteros.

Mi pregunta es:

¿Se ha incluido o se planea incluir el paso de valores por referencia a
lo C++ en los nuevos estándares de C?

He estado mirando el "C99RationaleV5.10" sin encontrar nada al respecto
(ahora tampoco tengo tiempo de revisarlo a fondo)
Antoine Leca
2004-04-16 20:25:30 UTC
Permalink
Post by Mikel Irazabal
¿Se ha incluido o se planea incluir el paso de valores por referencia
a lo C++ en los nuevos estándares de C?
En C99, hubó una propuesta de Tom Plum, en 1994, inspirada en C++. Fue
desmantelada el día después per Bob Jarvis, con contundez. De hecho, la
repuesta es incluso más interesante al respecte que la proposición.
<URL:ftp://dkuug.dk/JTC1/SC22/WG14/743>
<URL:ftp://dkuug.dk/JTC1/SC22/WG14/744 >
No hubó más debate sobre el tema. No parece un tema muy interesante para el
comité.

Hubo también una propuesta para clases, eso sí, bastante más completa, que
no tuvó exito. Basicamente, el razonamiento era, "si hacemos eso, estaremos
re-creando C++, lo que sirve para nada".

Para C0X, no tengo no idea. Pienso que no habrá clases tampoco. Pero para
las referencias...


Antoine
Mikel Irazabal
2004-04-18 15:02:49 UTC
Permalink
Interesante, gracias.
--
"... y es todo lo que tengo que decir sobre eso." - Forrest Gump
eolith[nO_Spam]
2004-04-17 01:48:09 UTC
Permalink
Bueno es que en C...a pesar de que sólo hay llamadas por valor...a ésto
se le suele llamar por referencia. Que yo sepa, no hay variables
referencia en C.
Post by Mikel Irazabal
En el post inicial Zirildian pedía saber cómo hacerlo con referencias, y
tú lo has hecho con punteros.
¿Se ha incluido o se planea incluir el paso de valores por referencia a
lo C++ en los nuevos estándares de C?
He estado mirando el "C99RationaleV5.10" sin encontrar nada al respecto
(ahora tampoco tengo tiempo de revisarlo a fondo)
Pablo
2004-04-21 23:23:25 UTC
Permalink
Post by Mikel Irazabal
En el post inicial Zirildian pedía saber cómo hacerlo con referencias, y
tú lo has hecho con punteros.
¿Se ha incluido o se planea incluir el paso de valores por referencia a
lo C++ en los nuevos estándares de C?
He estado mirando el "C99RationaleV5.10" sin encontrar nada al respecto
(ahora tampoco tengo tiempo de revisarlo a fondo)
Si defines la funcion como:
int funcion(int &n,int &m){
int v;
n++;
m++;
v=n+m;
return v;
}

las variables originales son modificadas y te ahorras el engorro de los
punteros. Esto lo he probado con el compilador Borland, no sé si es
estándar (yo lo he hecho por punteros toda la vida, pero ví un código como
éste en unos ejercicios resueltos en una clase de industriales y funciona).
Antoine Leca
2004-04-22 11:19:03 UTC
Permalink
Post by Pablo
int funcion(int &n,int &m){
las variables originales son modificadas y te ahorras el engorro de
los punteros. Esto lo he probado con el compilador Borland, no sé si
es estándar
Es C++, no pasa con un compilador C puro.


Antoine
J. L.
2004-04-22 14:15:19 UTC
Permalink
Post by Pablo
int funcion(int &n,int &m){
int v;
n++;
m++;
v=n+m;
return v;
}
las variables originales son modificadas y te ahorras el engorro de los
punteros. Esto lo he probado con el compilador Borland, no sé si es
estándar (yo lo he hecho por punteros toda la vida, pero ví un código como
éste en unos ejercicios resueltos en una clase de industriales y funciona).
Y este codigo que tiene que ver con C?

Saludos

Jose L. Sanchez Garrido

Loading...