据说是错的,有时间再看为什么
需要动态申请的啊,堆栈上面的数组是不能直接返回的会在函数退出的时候销毁掉
#include<stdio.h>
int **returnNum()
{
int **a,i,j;
a = (int**)malloc(5*sizeof(int*));
for(i=0;i<5;++i)
{
a[i] = (int*)malloc(5*sizeof(int));
for(j=0;j<5;++j)
{
a[i][j]=i;
}
}
return a;//error: cannot convert `int (*)[5]' to `int**' in return
}
int main()
{
//int cpy[5][5]=returnNum; // error: invalid initializer
int **cpy=returnNum();
int i,j;
for(i=0;i<5;++i)
{
for(j=0;j<5;++j)
{
printf("%d ", cpy[i][j]);
}
printf("\n");
free(cpy[i]);
}
free(cpy);
return 0;
}
在codeblock运行后,可以正常运行。注释中的错误只是针对注释的语句中的。
malloc分配的内存在堆中,子函数结束后堆内存不会释放,只有函数栈内存释放。malloc分配的内存要自己free掉,free后再把指针赋为NULL;