指针没有给出预期的结果

时间:2012-07-17 11:07:30

标签: c pointers

我是初学者。当我发现奇怪的东西时,我正在使用指针:

#include<stdio.h>

int* fun(int*);

int main()
{
    int i=4,*j;
    j=fun(&i);
    printf("%d ",*j);//gives correct answer -> how??
    printf("%d",*j);//gives incorrect answer
}

int* fun(int *i)
{
    int k;
    k=*i;
    return (&k);
}

main(), I am using printf(“%d”,* j);`2次。第一个给我正确答案,但第二个不是。为什么?

但这工作正常 -     的#include     int * func();

int main()
{
int *p;
p=func();
printf("%u", p);
printf("\n%d", *p);
printf("\n%d", *p);
printf("\n%d", *p);
printf("\n%d", *p);

}

int* func()
{
int i=10;
printf("%u", &i);
printf("\n%d", i);
return (&i);
}

2 个答案:

答案 0 :(得分:8)

通过返回指向局部变量的指针来调用未定义的行为。函数fun返回后,局部变量k占用的空间不再有效。实际上,fun之前使用的堆栈空间可能会被第一次调用printf覆盖。

答案 1 :(得分:2)

您将返回fun的本地变量的地址;一旦fun退出,该变量就不再存在,并且指针不再有效。严格地说,行为是不确定的。

最有可能发生的事情是k曾经占用的内存位置在第一次调用printf后被覆盖。

相关问题