<a target=_blank href="http://blog.csdn.net/zouxinfox/article/details/2525206">http://blog.csdn.net/zouxinfox/article/details/2525206</a>
#include <stdio.h>
#include <stdlib.h>
int (*retArray())[10]
{
int (*a)[10];
int i=0;
/*动态开辟空间*/
a=calloc(10,sizeof(int)); //a=(int (*)[10])calloc(10,sizeof(int));
/*赋值*/
for(i=0;i<10;i++)
{
(*a)[i]=i;
}
return a;
}
int main()
{
int (*b)[10];
/*函数返回指向数组的指针*/
b=retArray();
/*打印第一个元素*/
printf("%d/n",(*b)[0]);
/*释放空间*/
free(b);
return 0;
}
#include <stdio.h>
struct tag
{
int a[10];
}x,y;
struct tag retArray()
{
int i=0;
for(i=0;i<10;i++)
x.a[i]=i;
return x;
}
int main()
{
struct tag y=retArray();
printf("%d/n",y.a[3]);
return 0;
}
#include "stdio.h" char* aa();aa的返回类型用来printf("%s",aa());输出 可见应该是char*类型 int main() { printf("%s",aa()); return 0; } char* aa() { char k[]="abcde";//k是个局部数组 初始化为abcde还有个\0 当返回式 该局部数组被收回 k指向还在 但是内同没有了 return &k[0]; } 上面说的 楼上几位也说了~拓展下~~ 1.把char k[]="abcde";定义成全局就不说了~ 定义成全局会让数据分散,在只能用C不用C++的环境里构造类似对象的情况是会很糟。 2.char k[]="abcde";//既然在返回的时候被收回 那不让他收回的就行了 程序改成 char* aa() { static char k[]="abcde";//把k数组变成static数组 这样返回是k的内容依然保留 return &k[0]; } 除了static之外 还用种常用的方法。 char* aa() { char *k="abcde";//这里只定义了一个K指针 而k指向了abcde abcde我是const区的常量,不属于局部变量,被收回的只有k而已。 return &k[0]; } 上面的写法其实存在不安全因素 实际上它是隐式的const声明,那就把它补全 char* aa() { const char const *k="abcde"; return (char*)&k[0]; } 最后提一句 那个return &k[0];还是写成return k;好了