PDA

Ver la versión completa : Estructura de puntero por parametro...



Dwarft
09-06-2004, 18:41
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 !

flojito
10-06-2004, 10:02
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

KaoS
14-06-2004, 17:06
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

Dwarft
15-06-2004, 01:42
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 !

Scar_T
15-06-2004, 05:52
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.

Dwarft
15-06-2004, 14:58
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 ^^

KaoS
16-06-2004, 12:41
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

Dwarft
15-07-2004, 10:22
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.

Dwarft
16-07-2004, 18:49
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 ^^