/* Ed Heal 所说的 */ 然而,我认为最好用额外的例子来说明它。我修改了你的例子来做更多的事情。代码中的注释说明了大部分内容:
#include <stdio.h>
int i = 6;
int main(void)
{
    int i = 4;
    printf("%d\n", i); /* prints 4 */
    {
        extern int i; /* this i is now "current". */
        printf("%d\n", i); /* prints 6 */
        {
            int *x = &i; /* Save the address of the "old" i,
                          * before making a new one. */
            int i = 32; /* one more i. Becomes the "current" i.*/
            printf("%d\n", i); /* prints 32 */
            printf("%d\n", *x); /* prints 6 - "old" i through a pointer.*/
        }
        /* The "previous" i goes out of scope.
         * That extern one is "current" again. */
        printf("%d\n", i); /* prints 6 again */
    }
    /* That extern i goes out of scope.
     * The only remaining i is now "current". */
    printf("%d\n", i); /* prints 4 again */
    return 0;
}