Punteros en C

Iniciado por T cCracker, 31 Mayo 2013, 08:45 AM

0 Miembros y 1 Visitante están viendo este tema.

T cCracker

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

printf("valor...... %s ", (char*)punt);

y cuando lo hago con una variable tipo INT si

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
printf("valor de la memoria: %i", &punt[1]);
)



#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;

}

x64core

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/