Mi duda es respecto a la relación apuntador-arreglo, pero pondré primero mi interpretación de como creo que se trabajan los punteros, por si estoy equivocado en algo me puedan corregir y no tener que abrir de nuevo otro tema.
Como yo lo veo con un apuntador se puede referenciar a 3 datos distintos.
es decir:
Código:
char *x = "hola";
char *s1;
s1 = &x[2];
printf("%p\n", &s1); ///puedo hacer referencia a la dirección del apuntador
printf("%p\n", s1); ///a la dirección a la que apunta s1(es decir su valor)
printf("%s\n", s1);///y al dato que guarda la dirección a la que apunta s1.
Nose si mi idea este bien en un principio..
función que recibe la dirección de un arreglo:
Código:
void funcion(char *s1) ///recibe como parametro el valor del puntero(es decir una direccion)
{ ///que en este caso es la del principio de la cadena
char *Apu = s1; //Apu se le asigna el valor de s1(la direccion de la cadena)
char **todos;
todos = &s1; ///se le asigna la direccion de s1(no el valor)
printf("%p\n", &s1); ///imprime la direccion de s1
printf("%p\n", Apu);///imprime el valor de s1(la direccion de la cadena)
printf("%p\n", todos);///imprime el valor del apuntador, en este caso la direccion de s1.
printf("%s\n", *todos);///imprime la indireccion de &s1, en este caso seria el valor(la cadena).
}
Igual si estoy mal en algo les agradeceria que me lo hagan saber...
Ahora si, de lo que va el tema como dije al principio por lo que entiendo, la dirección del apuntador y el valor del apuntador son direcciones distintas, entonces como hago la diferencia por ejemplo en un arreglo de caracteres, si...
Código:
char cadena[5] = "hol";
printf("%p\n", cadena); //valor del apuntador, en este caso(la dirección del primer elemento del arreglo)
printf("%p\n", &(*(cadena+1))); ///la dirección del segundo elemento del arreglo
printf("%p\n", &(*(cadena+2)));///la dirección del tercer elemento del arreglo
¿Cual es la dirección donde se almacena el apuntador que tiene como valor la dirección del primer elemento del arreglo?
Código:
printf("%p\n", &cadena); //tratando de obtener la dirección del apuntador
Si lo hago de esta forma me tira la misma dirección que la del primer elemento del arreglo, es decir, la dirección del apuntador y la dirección del valor del apuntador son la misma, y esto me causa conflicto en comprensión.
Espero haberme explicado y puedan ilustrarme con esto...
De antemano gracias.