PLANETALIA Formación y Consultoría Punteros y Matrices en C - (2) versión 1.1 - 1/04/2008 int entero = &edad; // se asigna memoria para almacenar un int (4 bytes) , y se inicializa // con la dirección donde se encuentra edad (8937) int * puntero = &edad; // se asigna memoria para almacenar un puntero a un // entero (también 4 bytes), y se inicializa ese puntero con // la dirección de memoria donde se encuentra edad (8937) int * otro; // se asigna memoria para almacenar un puntero a un entero // y no se inicializa 10 ? ? ? ? ? ? ? ? ? ro en te nt pu ? 8937 ? ? ? ? ? ? ? ? 8937 ? ? ? ? ? ? ? ? ? ? bo om 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 8975 8976 8977 8978 8979 ? ? ? ? ? ? ? ? ? ot ed ro ad er o int edad = 10; // se asigna memoria para almacenar un int (4 bytes) ,y // se inicializa a 10 printf("%d", edad); // Se imprime el valor de edad : 10 printf("%d", entero); // Imprime el contenido de la variable entero, que es la dirección de memoria // de edad : 8937 printf("%d", puntero); // Imprime el contenido de la variable puntero, que es la dirección // de memoria donde se encuentra edad - 8937 printf("%d", *puntero); // Imprime lo que hay en la dirección de memoria a la que apunta puntero // (la 8937) : 10 printf("%d", *entero); // Dado que entero no fue declarado como puntero, a pesar de que // contiene lo mismo que puntero, esta expresión NO COMPILA printf("%d", * (int *) entero ); // Le indica al compilador - a pesar de que entero está declarado como int // que lo considere como si fuese realmente un puntero a un int, y en consecuencia // imprima el dato al que apunta entero : 10 printf("%d", puntero + 1); // Dado que puntero apunta a un int, imprime la direcciñon // de memoria donde iría el siguiente entero : 8941 printf("%d", entero+1); // Como entero no fue declarado como puntero, simplemente imprime el valor // de entero mas 1 : 8938 printf("%d", *puntero + 1); // Imprime el valor al que apunta puntero mas 1 : 11 printf("%d", otro); // Imprime el valor de la variable otro : como no está inicializada, puede ser // cualquier cosa printf("%d", *otro); // Imprime el valor del entero al que apunta otro, pero como otro no está inicializado // podría estar apuntando a cualquier lado de la memoria. Resultado : boom Creado por Alexander Hristov. (c) 2008 Planetalia S.L. (http://www.planetalia.com), Licencia Creative Commons by-nc-nd 2.5. Texto completo de la licencia en http://creativecommons.org/licenses/by-nc-nd/2.5/es/ La última versión de esta plantilla se encuentra siempre en http://www.ahristov.com/tutoriales/lenguaje-c/punteros.html