[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