C/Visual C - ing

 
Vista:

ing

Publicado por santiago fernandez (1 intervención) el 28/11/2001 14:39:36
Soy un nuevo programador de C bajo Linux y tengo problemas con el concepto de "paso de parametros por referencia" y "paso de parametros por valor". El siguiente código muestra éste concepto sin ningún problema en C bajo Windows, pero no funciona en C para Linux (marca error en la declaracion de &a y &b).
QUE MODIFICACION TENGO QUE HACER EN CODIGO DE C PARA LlNUX PARA PODERE MANEJAR EL CONCEPTO DE PARAMENTRO POR REFERENCIA????
GRACIAS!!!

********************************CODIGO***********************
#include <stdio.h>

int a,b;

void valor(int a, int b)
{
a=a+5;
b=5;
printf("resultados dentro de valor %d %d\n",a,b);
}

void referencia(int &a, int &b)
{
a=a+5;
b=5;
printf("resultados dentro de referencia %d %d\n",a,b);
}

void imprime(int a, int b)
{
printf("valor de a %d\n",a);
printf("valor de b %d\n",b);
}

void main()
{
a=10;
b=10;
valor(a,b);
imprime(a,b);
referencia(a,b);
imprime(a,b);
}
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:ing

Publicado por Googol (255 intervenciones) el 28/11/2001 20:17:51
El problema es que las referencias no están en el lenguaje C; es algo que añadieron en C++, así que si compilas en C puro y duro, no funciona.
En Windows te funciona porque el compilador que habrás utilizado compila en C++, y el de Linux en C puro.

Un saludo
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

RE:ing

Publicado por Ismael (230 intervenciones) el 29/11/2001 07:59:22
Debo manifestar mi desacuerdo con Googol, ya que el paso de parámetros por referencia, SÍ exister en el lenguaje C, no sólo en C++.
Tu programa (en entorno win funciona bien), presenta un problema de declaración de variables globales y locales:

#include <stdio.h>
int a,b;
void valor(int a, int b)
{

printf("resultados dentro de valor %d %d\n",a,b);
}

void referencia(int &a, int &b)
{
printf("resultados dentro de referencia %d %d\n",a+1,b+1);
}

void imprime(int a, int b)
{
printf("valor de a %d\n",a);
printf("valor de b %d\n",b);
}

void main()
{
int x, y;
x=2;
y=7;
valor(x,y);
imprime(x,y);
referencia(x,y);
imprime(x,y);
}
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

RE:ing

Publicado por Googol (255 intervenciones) el 01/12/2001 10:49:59
A ver, a ver... Al principio estaba C puro y duro, y después lo ampliaron a C++. C++ es C + Clases + Templates + Referencias + namespaces (creo que no se me olvida nada). Por tanto, las referencias en el ANSI C no aparecen.
Si compilas un código en C en un compilador de C++ debería compilar (salvo rarísimas excepciones que se vieron obligados a cambiar). El programa de Santiago (que no he leido entero), parece utilizar de C++ únicamente las referencias. Si lo compilas con un compilador de C++, funcionará. Pero si lo compilas con uno de C, dará error donde se declaran las referencias, porque eso es de C++.
El paso _por referencia_ en C se puede hacer, pero no utilizando el tipo _referencia_, sino utilizando punteros:

int f(int *a, int *b); /* Estilo de C */

int f(int &a, int &b); // Estilo de C++, aunque también puede
// usarse el de C.

Un saludo

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

RE:ing

Publicado por Alexis Leung (70 intervenciones) el 29/11/2001 11:25:39
A decir verdad, es la primera vez que veo este método para pasar valor por referencia. En mi compilador turbo c++ 1.01 protesta como tu dices, asi que aqui está mi método que seguro que debería servir.

#include <stdio.h>

int a,b;

void valor(int a, int b)
{
a=a+5;
b=5;
printf("resultados dentro de valor %d %d\n",a,b);
}

void referencia(int *a, int *b)
{
*a=*a+5; /* asigna el valor en la direccion a */
*b=5;
printf("resultados dentro de referencia %d %d\n",*a,*b);
}

void imprime(int a, int b)
{
printf("valor de a %d\n",a);
printf("valor de b %d\n",b);
}

void main()
{
a=10;
b=10;
valor(a,b);
imprime(a,b);
referencia(&a,&b); /* paso la direccion de cada avariable */
imprime(a,b);
}
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

RE:ing

Publicado por Slim (13 intervenciones) el 29/11/2001 18:55:42
En C el paso de referencias se hace a través de Apuntadores
y en C++ el paso de referencias se hace através de Apuntadores o Referencias.

Tu tienes la siguiente función:
void referencia(int &a, int &b)
{
a=a+5;
b=5;
printf("resultados dentro de referencia %d %d\n",a,b);
}

que solamente te servirá en un Compilador de C++, como por ejemplo Borland C++ o Visual C++ ya que de este modo estas usando el método de paso de referencias de C++; pero que no te funcionará en un Compilador de C

Lo que tienes que hacer para pasar referencias en el lenguaje C es esto:

void referencia(int *a, int *b)
{
*a=*a+5;
*b=5;
printf("resultados dentro de referencia %d %d\n",*a,*b);
}

y tienes que llamarla de este modo

referencia (&variable1, &variable2);
O sea que este es el único modo de pasar parámetros por referencia en un compilador de C, pero no es el único para C++.

Espero haberte ayudado Santiago
Si tienes dudas sobre C/C++ preguntame a mi cuenta de e-mail o aquí en este foro de consulta.
Suerte.


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