Ver la versión completa : Estructura de puntero por parametro...
Hola a todos !
A ver si alguien pudiese ayudarme... :(
Quiero pasar una estructura de puntero por parametros y que guarde la posicion de los punteros usados o elegidos.
He estado buscando y solo encuentro ejemplos y paginas con punteros normales pero no de estructura:
Asias ^^ !
Salu2 !
Hola,
creo que no entiendo bien... cuando dices "estructura de puntero por parámetros" ¿te refieres a pasar como parámetro un puntero a estructura en una función? Suponiendo que lo quieras en C/C++ puedes mirar aquí (http://zeswish.homeip.net/apuntes1/programacion/temas.php?tema=7&seccion=8)
Iba a intentar explicarlo, pero que el tipo del link lo hace bastante mejor que yo ;)
Salud y suerte
Dwartf tio q mal t explicas xD, a ver si nos aclaras un poco + tu duda y el lenguaje en el que estas programando ;), asi quizas podamos ayudarte :P
Quiero pasar una estructura de puntero por parametros y que guarde la posicion de los punteros usados o elegidos.
Estructura
struct Direcciones
{
char* puntero;
};
Funcion:
void mi_funcion(Direcciones parametro)
{
char* aux;
aux=parametro.puntero;
}
¿Te refieres a algo de eso?¿?Sino aclaranoslo y alguno responderemos.
Un saludo,
KaoS
Perdonadme, es que esto lo postee desde clase y no pude hacerlo bien.
Se trata de lenguaje C para el compilador Rhide. (Digo el compilador porque este es bastante basico y hay muchas cosas que no las hacen bien).
Lo que digo es por ejemplo, pasar un puntero que este apuntando a una variable que tiene valor 100 por ejemplo, pues al entrar en la funcion si se modifica a 99 que salga de la funcion 99 y no 100.
Lo he intentado de la manera siguiente:
/*Declaramos puntero y funciones*/
struct tipo
{ int v;
struct tipo *s;
};
struct tipo *i,*a,*w;
void meter_dato(struct tipo *i,struct tipo *a,struct tipo *w);
void listar_dato(struct tipo *i,struct tipo *a,struct tipo *w);
/*Llamamos funciones*/
meter_dato(*i,*a,*w);
listar_dato(*i,*a,*w);
/*Despues se desarrollarian las funciones*/
De esta manera deberia de funcionar, no me da ningun error al compilar pero no rula.
Salu2 !
Bueno, este ejemplo es sencillo y hace lo que dices:
void mifuncion(int *a) {
*a = 99;
}
int main() {
int a=100;
mifuncion(&a);
return 0;
}
Eso con un entero, ahora con una estructura:
typedef struct {
int val;
} estructura;
void mifuncion(estructura *e) {
e->val = 99;
}
int main() {
estructura est;
est.val = 100;
mifuncion(&est);
return 0;
}
Espero te sirva de algo.
El typedef para que sirve ?? No le has puesto nombre a la estructura, no ??
Salu2! Voy a probarlo, pero es como intente hacerlo mas o menos jeje
Asias ^^
Dwartf el typedef es como su nombre indica para definir un tipo de dato y asi te ahorras poner struct cada vez q declares el tipo y tal, se utiliza bastante, ade+ si tiene nombre la estructura:
typedef struct {
int val;
} estructura;
(estructura es el nombre)
Vnga, spero haberte aclarado la duda.
Saludos,
KaoS
Bueno, vuelvo con esto otra vez, la ultima vez lo deje...
Os voy a poner un codigo:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define TAM 50
void anadir(struct persona *i,struct persona *w,struct persona *a);
void listar(struct persona *i,struct persona *w);
main()
{ struct persona
{ char n[TAM];
int e;
struct persona *sig;
};
struct persona *i=NULL,*w,*a;
char l;
while(l != 's')
{ l=0; printf("\n MENU");
printf("\nAñadir ]1[");
printf("\nListar ]2[");
printf("\nSalir [s]");
printf("\nOpcion: ");
scanf("%s",&l);
switch(l)
{
case '1': anadir(**i,**w,**a); break;
case '2': listar(**i,**w); break;
}
}
}
void anadir(struct persona *i,struct persona *w,struct persona *a)
{
if(i == NULL)
{ i = (persona *)malloc(sizeof(persona));
printf("\nNombre: ");
scanf("%s",&i->n);
printf("\nEdad: ");
scanf("%i",&i->e);
i->sig=NULL;
a=i;
}
else
{ w=NULL;
w = (persona *)malloc(sizeof(persona));
printf("\nNombre: ");
scanf("%s",&w->n);
printf("\nEdad: ");
scanf("%i",&w->e);
w->sig=NULL;
a->sig=w;
a=w;
}
}
Bien, probarlo y me decis, debe de dar error tal y como esta el codigo pero es que no encuentro la manera de pasar la estructura dinamica por parametros.
Estoy utilizando ahora el Dev-C++ 4
Salu2 !
Gracias ^^
willamette
16-07-2004, 16:20
Se ve que no le prestaste mucha atencion a Swar_t xD.
Mandale a la función la dirección de memoria de ese puntero con el &, y el doble puntero, en los parametros que recibe la función **.
anadir(&i,&w,&a);
void anadir(struct persona **i,struct persona **w,struct persona **a)
con el consecuente tratamiento dentro de la función.
y un consejillo es que antes del while inicialices la variable l a cualquier cosa distinta de 's' (no estoy seguro si se inicializa solo a algo).
Otra cosilla que veo es que utilizas scanf () %s es para cadenas (por los que puedes machacar los datos de la memoria utilizando un char ¿no?) , con una variable de tipo char (l) utiliza mejor la función getch() o getchar().
No he analizado el codigo pero a simple vista es lo que veo.
Vale, lo de Swar_t no lo habre comprendido bien, gracias por la aclaracion willamette.
Lo del scanf... Yo suelo utilizar el fgets(char,tamaño,stdin); pero en Dev-C++ no funciona el stdin, no se porque.
Salu2 !
Asias ^^