3
#include <stdio.h>
int main(int argc, char * argv[])
{
    int *ip;
    printf("%d\n", *ip);
    ip=NULL;

        if (1)
        {
            int i=300;
            printf("Inside If Block \n");
            ip=&i;
            printf("*ip=%d----------\n", *ip);
        }
    //printf("i=%d\n", i); /* Now this will cause an error, i has Block scope, fair enough */
    printf("*ip=%d\n", *ip);    
    return 0;
}      

最後のprintf()が の正しい値を返すのはiなぜですか? 範囲外になって
も、メモリの場所がまだ値を保持しているためですか?iそれはどのように機能しますか?

4

2 に答える 2

0

これは、ipそれが指す変数が存在しなくなった場合でも、その値を保持するためです。

のような星座では、これを行うには細心の注意を払う必要があります

#include <stdio.h>
int main(int argc, char * argv[])
{
    int *ip;
    printf("%d\n", *ip);
    ip=NULL;

        if (1)
        {
            int i=300;
            printf("Inside If Block \n");
            ip=&i;
            printf("*ip=%d----------\n", *ip);
        }

    {
        float j=400.0;
    }

    //printf("i=%d\n", i); /* Now this will cause an error, i has Block scope, fair enough */
    printf("*ip=%d\n", *ip);    
    return 0;
}

変数は共存しないため、変数iとその場所を共有する可能性があります。そこを指すと、のj値が破損する可能性があります。ipj

于 2012-11-26T16:14:36.610 に答える