#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 第二个值是垃圾值。为甚麽呢?如何正确使用双指针来访问数组?
发布于 2013-02-19 13:33:48
它是。
您正在存储的局部变量j的地址不存在于函数之外。
j被保证只存在于函数作用域{ }中。一旦此作用域结束,通过其地址引用j将导致未定义的行为。
未定义的行为意味着编译器不需要显示任何特定的观察到的行为,因此它可以显示任何输出。
发布于 2013-02-19 13:37:36
int j=10;是堆栈上分配的局部变量。在函数外部取消引用它是未定义的行为。警告:永远不会返回指向任何局部变量的指针,除非您非常确定自己在做什么。如果你有把握,再考虑一下。
https://stackoverflow.com/questions/14950514
复制相似问题