本地指针变量

时间:2011-10-17 06:57:57

标签: c pointers

以下程序的输出是什么?

int *call();

void main() {
  int *ptr = call();
  printf("%d : %u",*ptr,ptr);
  clrscr();
  printf("%d",*ptr);
}

int *call() {
  int x = 25;
  ++x;
  //printf("%d : %u",x,&x);
  return &x;
}

预期输出:垃圾值
实际产出:26 #someaddr

由于x是局部变量,因此它的作用域在函数调用中结束。我发现这段代码是悬空指针的一个例子。

3 个答案:

答案 0 :(得分:2)

未定义的行为

因为从call()返回后x范围已经死了所以指向该变量的指针你不能使用ahaed

通过编译您的程序,您将收到以下错误

warning: function returns address of local variable

如果您的程序自从其未定义的行为以来给出输出26。你根本不应该这样做。

答案 1 :(得分:1)

此函数的输出未定义。正如您已经指出的那样,x的范围以函数结束。但是26写的内存并没有使用agian。因此,打印此值将给出26.如果再次使用此内存,则可能是任何内容。

答案 2 :(得分:0)

欢迎您,您已进入Undefined Behavior山谷。你无法预测什么是任何价值。即使价值有道理,也要忽略它。