?? fun()
{
int a[3]={3,3,4};
return &a;
}
Run Code Online (Sandbox Code Playgroud)
什么是兼容的返回类型.这里指针指向3个整数的数组,而不仅仅是指向整数数组的指针.目标是返回一个指向3个整数数组的指针.
不要这样做.
您正在返回指向局部变量的指针.当函数返回时,该指针指向一个不再有效的位置,因此这个练习毫无意义.虽然返回类型是int (*)[3],但是当你使用它作为函数的返回类型时,原型将是int (*fun(void))[3](呃,eew)
然而
如果a是静态的,你可以做到
int (*fun(void))[3]
{
static int a[3]={3,3,4};
return &a;
}
Run Code Online (Sandbox Code Playgroud)
返回一个指向数组中第一个元素的指针是比较常见的 - 尽管你必须在调用者中"知道"你可以访问3并且只能访问该指针的3个元素.
int *fun(void)
{
static int a[3]={3,3,4};
return &a[0]; // or just return a;
}
Run Code Online (Sandbox Code Playgroud)
由于a在这些情况下是静态的,您将不得不担心重入
2种更常见的实现方法:
通过参数传入数组并在调用者中分配:
void fun(int *a)
{
a[0] = 3;
a[1] = 3;
a[2] = 4;
}
Run Code Online (Sandbox Code Playgroud)
称之为:
int a[3];
fun(a);
Run Code Online (Sandbox Code Playgroud)
动态分配内存:
int *fun(void)
{
int *a = malloc(3*sizeof *a);
if(a) {
a[0] = 3;
a[1] = 3;
a[2] = 4;
}
return a;
}
Run Code Online (Sandbox Code Playgroud)
称之为:
int *a;
a = fun();
if(a) {
///use a
free(a); // remember to free it when done
} else {
//out of memory
}
Run Code Online (Sandbox Code Playgroud)