elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Direccion del apuntador de un arreglo?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Direccion del apuntador de un arreglo?  (Leído 2,056 veces)
mort

Desconectado Desconectado

Mensajes: 14


Ver Perfil
¿Direccion del apuntador de un arreglo?
« en: 18 Abril 2016, 00:15 am »

Bien espero darme a entender, Tengo una incomodidad respecto al uso  de apuntadores(o quizá varias), y pues siempre que creo que ya por fin he entendido algo, tengo que reescribir mi interpretación de eso porque se me siguen  presentando nuevas.

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. :)


En línea

HardForo

Desconectado Desconectado

Mensajes: 219


HardForo.com


Ver Perfil WWW
Re: ¿Direccion del apuntador de un arreglo?
« Respuesta #1 en: 18 Abril 2016, 00:30 am »

La direccion  que ves como del puntero es la direccion como dices del primer elemento del array.

El puntero podria estar en si en la pila, o en otro lado pero tu ves la dirección a donde apunta el contenido.   Supongo la dirección real del puntero no es algo que le concierna al programador y por eso no se provee.



PD: habia hecho una edición pero veo se perdió y vuelvo a hacerla.


« Última modificación: 18 Abril 2016, 13:50 pm por boctulus » En línea

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: ¿Direccion del apuntador de un arreglo?
« Respuesta #2 en: 18 Abril 2016, 12:53 pm »

cadena es un objeto que devuelve la dirección de inicio del array al que representa, es recir, tanto si se lo das a printf con %p, que imprime direcciones de memoria, te tiene que dar lo mismo ya que cadena y &cadena son equivalentes:  los dos devuelven la dirección del primer elemento del array.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Apuntador a arreglo bidimensional en c
Programación C/C++
UltimateDragoon 2 4,849 Último mensaje 3 Octubre 2011, 23:05 pm
por UltimateDragoon
¿Cómo dimensionar un doble apuntador?
Programación C/C++
ERIK546 5 5,028 Último mensaje 2 Julio 2012, 08:02 am
por ERIK546
Ayuda con getopt(), no me da el apuntador optarg
Programación C/C++
mxpblack 0 1,050 Último mensaje 26 Noviembre 2015, 02:01 am
por mxpblack
Lenguaje C:apuntador a arreglo de enteros y arreglo de apuntadores a enteros.
Programación C/C++
NOB2014 2 2,372 Último mensaje 27 Noviembre 2015, 12:59 pm
por NOB2014
inicializacion de apuntador
Programación C/C++
valentz 2 1,689 Último mensaje 9 Abril 2019, 22:11 pm
por laephy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines