[C con Clase] duda de punteros

Steven Davidson srd4121 en njit.edu
Dom Sep 12 07:42:46 CEST 2010


Hola Manuel,

On 9/12/2010 1:02 AM, Manuel Dun wrote:
> yo entiendo que un puntero apunta a una variable y que almacena una
> dirección de memoria, pero lo que no entiendo es cuando ponen el
> ejemplo:
> char *cadena2 = "Cadena 2";
> en este caso ¿que hace la computadora? porque no veo que esté
> apuntando a ninguna variable o es que automaticamente crea una
> variable a que apuntar.

Exacto, pero el compilador es quien se encarga de crear memoria para esa 
cadena literal. Cualquier tipo de array ES la dirección de memoria de su 
primer elemento.

En este ejemplo, 'cadena2' podría apuntar a otra cadena.

> Otra cosa:
> esta bien escribir
> char a[10];
> char *b=&a;//puntero que apunta a 'a'
> o
> char a[10];
> char *b=a;

Con la explicación que acabo de dar, la segunda forma es la correcta, 
porque 'a' ES la dirección de memoria del primer elemento. Técnicamente, 
'a' no es una variable, sino más bien un identificador (un nombre). Se 
crean varias variables que son los elementos, que en este caso son 10 
caracteres contiguos en memoria.

Lingüísticamente, 'a' es una entidad de tipo 'char []', la cual puede 
ser tratada como un 'char *' implícitamente. Para poder acceder a cada 
carácter, usamos el identificador 'a' junto con el operador []. Por ejemplo,

a[4] = 10;
a[3] += 2*a[4] - 9;

También podemos usar la forma de acceder con punteros. Por ejemplo,

*(a+4) = 10;
*(a+3) += 2**(a+4) - 9;


Espero haber aclarado las dudas.

Steven





Más información sobre la lista de distribución Cconclase