#include <stdio.h>
int main()
{
int **p(void),**p1;
p1=p();
int i;
for(i=0;i<3;i++)
printf("%d ",*(p1[i]));
return 0;
}
int **p(void)
{
int a[3]={1,2,3},*p[3]={&a[0],&a[1],&a[2]},**p2;
p2=p;
return p2;
}

#include <stdio.h>
int main()
{
int **p(void),**p1;
p1=p();
int i;
for(i=0;i<3;i++)
printf("%d ",*(p1[i]));
return 0;
}
int **p(void)
{
int a[3]={1,2,3},*p[3]={&a[0],&a[1],&a[2]},**p2;
p2=p;
return p2;
}

因为 int a[3]={1,2,3},*p[3]={&a[0],&a[1],&a[2]},**p2; 都是函数里的局部变量,函数调用执行完后,都被从内存里释放了,所以再输出时就出错了,只要在函数里将这些变量设置为静态变量即可,修改如下,供参考:
#include <stdio.h>
int main()
{
int** p(void), ** p1;
p1 = p();
int i;
for (i = 0; i < 3; i++)
printf("%d ", *(p1[i]));
return 0;
}
int** p(void)
{
static int a[3] = { 1,2,3 }, * p[3] = { &a[0],&a[1],&a[2] }, ** p2; // 修改
p2 = p;
return p2;
}