关于二维数组,指针的指针和堆
#include<stdio.h>
int a[2][2];
int **init()
{
a[0][0]=1;
a[0][1]=2;
a[1][0]=3;
a[1][1]=4;
return a;
}
int main()
{
int **temp=init();
printf("%d\n",a[0][1]);
return 0;
}
各位大侠能否告诉这个程序错在哪里啊,我用GCC编译,告诉内存错误,在打印a[0][1]的时候,我的一个朋友告诉我,对指针的指针取值,只能在堆上进行,我这里是数组,是在栈里,所以错误,不知道大侠们有什么见解?
------解决方案--------------------C/C++ code
#include<stdio.h>
int a[2][2];
typedef int (*ARRAY)[2]; //注意int** 和int (*)[2]的区别
ARRAY init()
{
a[0][0]=1;
a[0][1]=2;
a[1][0]=3;
a[1][1]=4;
return a;
}
int main()
{
int (*temp)[2] = init();
printf("%d\n",a[0][1]);
return 0;
}
------解决方案--------------------
a[2][2] 和 int** 并不等价
函数的返回值不能是数组
基于上面两个情况,应该是init函数的返回值有问题。