2017-04-06 90 views
-1

,所以我开始在C编程现在我有一个指针问题:改变价值

int * diff(){ 
    int array[2] = {1,2}; 
    return array; 
} 

int main(int argc, char const *argv[]) { 
    int *p; 
    p = diff(); 
    printf("%d\n", *(p)); 
    printf("%d\n", *(p)); 

    return 0; 
} 

因此启动该程序后。我的终端显示如下:

1 
0 

那么为什么* p的值会改变?

+2

返回指向局部变量==未定义行为的指针。 –

+1

@Downvoters,由于这个问题写得很好,并且有一个很好的代码片段,所以有点苛刻。作为初学者,很难调出搜索条件。 – Bathsheba

回答

1

您的程序的行为是undefined

array具有自动存储持续时间(非正式地,将其视为“局部变量”),并且取消引用返回到main的指针是语言不允许的。

(我们称之为悬挂指针)。

+0

先生,nitpick:_“取消引用指向返回到main的指针不被语言”_“所允许,那么语言永远不会阻止你,它说它将是UB。 –