C/Visual C - en C, las variables globales q yo tenga declaradas

 
Vista:

en C, las variables globales q yo tenga declaradas

Publicado por kno21 (2 intervenciones) el 04/01/2002 10:52:33
en C, las variables globales q yo tenga declaradas, tienen q pasar por la cabecera de las funciones o no hace falta???

Otra cosa: estoy haciendo una tabla dinamica de la siguiente estructura.
struct Tcliente
{ char nombre[30];
char apellidos[50];
} *p;

Entonces, para reservar memoria paa el primer cliente lo hago con:
p=(struct Tcliente *) malloc(sizeof(struct Tcliente);
pero a partir del primer cliente, no se como reservarle memoria (no kieor hacer una lista enlazada). Creo q puede ser con el realloc, pero no me va.

Otra cosa: porq si yo declaro esto.. char *c; puedo hacer estas cosas:
c[0]='a'; c[1]='b'; si no he reservado memoria.

GRACIAS DE ANTEMANO!!!!!
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:en C, las variables globales q yo tenga declara

Publicado por Diego G. Ruiz (41 intervenciones) el 04/01/2002 16:54:13
Respecto a la primer pregunta, las variables globales no es necesario pasarlas como parámetro a las funciones porque son globales, lo que si es probable es que en función de como tengas organizado tu proyecto del fuente, tengas que colocar un "extern" mas el nombre de la variable externa para indicarle al compilador que te vas a referir a una variable que está definida en otro archivo .c
De todos modos te recomiendo que minimices el uso de variables globales.

La segunda pregunta no se si la entiendo bien, ¿no querés hacer una lista enlazada pero a la vez no sabés cuantos Tcliente vas a necesitar?

Yo te recomiendo que si no te querés complicar la vida con una lista enlazada, crees un array de Tcliente de un número lo suficientemente grande como para que te alcance para el peor caso. De este modo no tenés que reallocar nada, tal vez no sea la solución mas elegante respecto al uso de memoria, pero es una alernativa a la asignación dinámica de las listas enlazadas.

Respecto a la tercer pregunta la respuesta es NO. Si no reservaste memoria no puedes acceder a c[0] legalmente.

Saludos.
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:en C, las variables globales q yo tenga declara

Publicado por Alexis Leung (70 intervenciones) el 05/01/2002 02:04:32
Con respecto a la segunda pregunta de reservar memoria lo puedes hacer con malloc. Ya que malloc devuelve un puntero void a una zona de memoria segura. Pero lo que no entiendo es para que lo vas a hacer, ya que si no es un lista enlazada o un arbol entonces, ¿Como sabrás donde queda localizado la memoria de cada estructura?.

Ejemplo:
p = (struct Tcliente *) malloc(sizeof(struct Tcliente);
reservas memoria segura para p;
vuelves hacer:
p = (struct Tcliente *) malloc(sizeof(struct Tcliente);
lo que escribas a p no estará sobreescribiendo lo que tenía p ya que p apunta a otra posición de memoria.

Con respecto a tu tercera pregunta es muy sencillo cuando haces esto:

char *c;

c es un puntero APUNTANDO a la PRIMERA POSICIÓN de una cadena.

Puedes hacer c[0] = 'a', c[1] = 'b'.
Pero debes recordar que si no utilizas malloc antes de hacer esto, el puntero estará apuntando a una REGION DE MEMORIA DESCONOCIDA y pueda llegar a sobreescribir otros datos provocando la caída del sistema. ES DECIR, NUNCA ASIGNES UN VALOR A UN PUNTERO HASTA QUE NO LE HAYAS RESERVADO MEMORIA SEGURA.
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