en pascal procedure uno(var c:integer)
todo lo que pasa en el procedure sobre c se devuelve el cambio en el main
en c
void uno(int c)
{c=19}
main(){
int d;
d=8;
uno(d);
//d ahora sigue valiendo 8 y quiero que se asigne en uno 19}
}
como hago?
seguro que ETERNAL IDOL firme me dara la posta.
Te lo dije en el otro hilo, con un ejemplo y un enlace que lo explica detalladamente. Tenes que pasar el parametro por referencia y no por valor.
void uno(int *c)
{
*c=19;
}
...
uno(&d);
Esto no lo hiba a descubrir nunca. Otra vez graciacias.
Me surgio un problema con el struct. Lo resolvi usando variables glovales, pero no es la idea. es molesto asignar antes de llamar.
struct st{ int i1 }
void uno(st *i2){
int i3;
i3=20;
*i2.i1=i3;//esto no se puede! =&i3 tampoco. pruebo no?
}
void main()
st i;
uno(&i);
}
Usa etiquetas GeSHi para insertar el código. Están en la barra de herramientas, en un desplegable, cuando estás escribiendo un post o una respuesta. (Para moderadores y webmaster: Sería mejor cambiar el texto Código GeSHi por algo más intuitivo como 'Elige lenguaje...' o 'Color syntax...'.
AXA, ¿qué estás usando para aprender C?
Veo main sin tipo o main con tipo void... Normalmente un libro o tutorial (de C moderno, no el pre-ansi) te dice que main es de tipo int y hay que marcarlo explícitamente.
También debes tener en cuenta la precedencia de operadores:
*i2.i1=i3;
estás dereferenciando i1, no i2.
Una pequeña prueba de ello:
#include <stdio.h>
#include <stdlib.h>
struct st {
int *miembro;
};
int main() {
struct st mi_estructura;
mi_estructura.miembro = malloc(sizeof(int));
*mi_estructura.miembro = 20;
printf("%d\n", *mi_estructura.miembro);
free(mi_estructura.miembro);
}
Por tanto debería ser así:
(*i2).i1=i3;
Aunque en C tienes el operador flecha que te limpia el código:
i2->i1=i3;
Por tanto el código último que has puesto, solucionados estos pequeños fallos y poniendo nombres representativos en los identificadores, quedaría algo así:
#include <stdio.h>
struct st {
int miembro;
};
void inicializa_a_20(struct st *una_estructura) {
una_estructura->miembro = 20;
// alternativa:
// (*una_estructura).miembro = 20;
}
int main() {
struct st mi_estructura;
inicializa_a_20(&mi_estructura);
printf("%d\n", mi_estructura.miembro);
}