elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como declaro una variable en un void para que varie?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como declaro una variable en un void para que varie?  (Leído 3,390 veces)
AXA

Desconectado Desconectado

Mensajes: 18



Ver Perfil WWW
como declaro una variable en un void para que varie?
« en: 25 Octubre 2021, 07:03 am »

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.


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: como declaro una variable en un void para que varie?
« Respuesta #1 en: 25 Octubre 2021, 09:57 am »

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.

Código
  1. void uno(int *c)
  2. {
  3.  *c=19;
  4. }
  5. ...
  6. uno(&d);


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
AXA

Desconectado Desconectado

Mensajes: 18



Ver Perfil WWW
Re: como declaro una variable en un void para que varie?
« Respuesta #2 en: 25 Octubre 2021, 12:06 pm »

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);
}
« Última modificación: 25 Octubre 2021, 13:55 pm por Eternal Idol » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: como declaro una variable en un void para que varie?
« Respuesta #3 en: 25 Octubre 2021, 13:51 pm »

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:
Código:
*i2.i1=i3;
estás dereferenciando i1, no i2.
Una pequeña prueba de ello:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct st {
  5. int *miembro;
  6. };
  7.  
  8. int main() {
  9. struct st mi_estructura;
  10. mi_estructura.miembro = malloc(sizeof(int));
  11. *mi_estructura.miembro = 20;
  12.  
  13. printf("%d\n", *mi_estructura.miembro);
  14.  
  15. free(mi_estructura.miembro);
  16. }
Por tanto debería ser así:
Código:
(*i2).i1=i3;
Aunque en C tienes el operador flecha que te limpia el código:
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í:
Código
  1. #include <stdio.h>
  2.  
  3. struct st {
  4. int miembro;
  5. };
  6.  
  7. void inicializa_a_20(struct st *una_estructura) {
  8. una_estructura->miembro = 20;
  9. // alternativa:
  10. // (*una_estructura).miembro = 20;
  11. }
  12.  
  13. int main() {
  14. struct st mi_estructura;
  15. inicializa_a_20(&mi_estructura);
  16. printf("%d\n", mi_estructura.miembro);
  17. }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines