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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Punteros en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Punteros en C  (Leído 1,241 veces)
T cCracker

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Punteros en C
« en: 31 Mayo 2013, 08:45 am »

buenas tardes amigos, dado este sencillo codigo tengo las siguientes dudas:
1) porque al mostrar en pantalla el valor apuntado hacia un vector, no se referencia al puntero? (es decir, no escribo el * cuando hago
Código:
printf("valor...... %s ", (char*)punt); 

y cuando lo hago con una variable tipo INT si
Código:
printf("el valor.... %i\n", *(int*)punt);

2) porque no puedo tomar la direccion especifica cuando apunto a una direccion dinamica?
(es decir, no puedo hacer
 
Código:
 printf("valor de la memoria: %i", &punt[1]);
)


Código:
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    void *punt;

punt = malloc(20 * sizeof(char));
strcpy(punt, "hola mundo\n");
printf("el valor al que apunta es: %s \n", (char*)punt); //aca no se referencia
printf("direccion de memoria..: %d\n",&punt);


free(punt);

punt = malloc(sizeof(int));
*(int*)punt = 1;
printf("el valor apuntado es: %i\n", *(int*)punt); //aca si se referencia el puntero
printf("direccion de memoria..: %d\n",&punt);
printf("direccion de memoria..: %d\n",&punt[1]);//porque esto no se puede
printf("direccion de memoria..: %d\n",&punt[2]);
printf("direccion de memoria..: %d\n",&punt[3]);

free(punt);

return 0;

}


En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Punteros en C
« Respuesta #1 en: 31 Mayo 2013, 09:15 am »

1) punt ya es un puntero a la cadena ( en ese ejemplo ) además de eso printf con el formato %s toma en cuenta que el parametro pasado
es una cadena y por ende lo tratara como tal, esto es asunto interno de printf no te confundas.


2) El problema es que es de tipo void* no sabe el tamaño de cada elemento que apunta a void* puede ser de tipo
IMAGE_NT_HEADERS,DWORD,etc. y los tamaños son totalmente diferentes, si haces un casting a algun tipo veras que si se puede.

Y además printf tiene el %p para mostrar direcciones de memoria:
http://www.cplusplus.com/reference/cstdio/printf/



En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
punteros
Programación Visual Basic
bautistasbr 4 2,120 Último mensaje 30 Septiembre 2005, 19:35 pm
por NYlOn
Duda Punteros Dobles/Array de punteros
Programación C/C++
MisterJava 2 4,950 Último mensaje 30 Diciembre 2012, 20:19 pm
por MisterJava
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines