#include <stdio.h>
void func(int **);

int main()
{

  int *arr[2];

  func(arr);

  printf("value [1] = %d \n",*arr[0]);

  printf("value [2] = %d \n",*arr[1]);
  return 0;
}

void func(int **arr)
{
  int j = 10;
  arr[0] = &j;
  arr[1] = &j;
}


该代码已使用gcc成功编译。但是,输出为:

value [1] = 10

value [2] = 32725


第二个值是垃圾值。为什么会这样呢?如何正确使用双指针访问数组?

最佳答案

Undefined Behavior
您正在存储本地变量j的地址,该地址在该功能之外不存在。
保证j仅存在于功能范围{ }中。一旦此作用域结束,通过其地址引用j会导致未定义的行为。

未定义的行为意味着编译器不需要显示任何观察到的特定行为,因此它可以显示任何输出。

关于c - 指针数组中的垃圾值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14950514/

10-16 13:01