C/Visual C - novato en punteros

 
Vista:

novato en punteros

Publicado por noavato (1 intervención) el 11/05/2006 14:10:00
estoy aprendiendo C

esto va de punteros:

#include <stdio.h>

int main()
{
int *a;

*a = 5;
}

este en que falla ? es el ejemplo de un libro pero no lo veo claro.
dice:

Solución: No hemos dado ninguna dirección al puntero. No sabemos a dónde apunta. Puede apuntar a cualquier sitio, al darle un valor estamos encribiendo en un lugar desconocido de la memoria. Esto puede dar problemas e incluso bloquear el ordenador. Recordemos que al ejecutar un programa éste se copia en la memoria, al escribir en cualquier parte puede que estemos cambiando el programa (en la memoria, no en el disco duro).

Gracias
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:novato en punteros

Publicado por Juan (68 intervenciones) el 11/05/2006 21:11:32
Ok. Un puntero es una variable que contiene una direccion de memoria cierto?
Que ocurre cuando declaras un entero? se inicializa con una valor por defecto que depende del lenguaje. Casos como Java o C se inicializan en cero, lenguaje mas antiguos se incializan con el contenido que tenga en menoria el espacio donde queda la variable adaptado al tipo de dato.
Igual pasa con los punteros.
Cuando creas una variable de tipo puntero, no sabemos a donde apunta. Imagina en vez de un tipo simple, un tipo estructurado. Imagina una persona p y que haces
Persona *p;
p->Nombre = "Juan"
Te pregunto, donde esta el espacio que guarde la persona p? p no es una persona, sino un puntero a persona, luego no tiene espacio fisico para almacenar esa informacion.
En cambio si haces algo asi
int a = 6;
int b = &a;
b*=5
si es valido, porque b ya tiene un espacio que es valido y que esta referenciado para un entero.
La diferencia esta en tener un suelo, un soporte en memoria para almacenar la data.
te anexo este link para que lo veas a ver que tal
http://www.fismat.umich.mx/mn1/manual/node9.html
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:novato en punteros

Publicado por Yasmany (9 intervenciones) el 15/01/2007 06:11:26
#include <stdio.h>

int main()
{
int *a;

*a = 5;
}

Falla en que los punteros, a pesar de ser variables, no guardan valores específicamente, sino direcciones de memoria. Cuando dices int* a; estás diciendo que a va a guardar una dirección de memoria de una variable entera o un arreglo, pero cuál??, por eso es que el ejemplo falla, porque al momento de la asignación a no tiene dirección de memoria, por ejemplo:

#include <stdio.h>

int main()
{
int *a;
int k;

a = &k;

*a = 5;
}

ahora no falla porque antes de la asignación dijimos que a va a almacenar la dirección de memoria de k; por tanto, cambiando el valor a lo que apunta a, lo que realmente cambiamos es cambiar el valor de k, que es la dirección de memoria a la que apunta k. Espero que te sirva...... de todas formas va a http://c.conclase.net; te va a servir de mucho.
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