C语言如何定义返回指向3元素数组指针的函数
问题解答
是否可以返回指向3个元素数组的指针?
完全可以,C语言原生支持这种返回类型。
函数定义规则
你给出的二维数组double A[3][3]的数组名在隐式转换后,类型为double (*)[3]——也就是指向包含3个double元素的数组的指针,要让return A语句合法,函数的返回值类型必须和这个类型完全匹配。
写法1:直接定义
// 参数列表可按需修改,这里用void示例无参数场景 double (*your_function_name(void))[3] { static double A[3][3] = {1,2,3,4,5,6,7,8,9}; return A; }
语法拆解:
your_function_name(void):标识这是一个无参函数- 外层的
(*)说明函数返回值为指针类型 - 后面的
[3]说明指针指向长度为3的数组 - 最开头的
double说明数组的元素为双精度浮点数
写法2:用typedef简化(可读性更高)
先给目标指针类型定义别名:
typedef double (*Arr3dPtr)[3];
之后函数定义可以简化为:
Arr3dPtr your_function_name(void) { static double A[3][3] = {1,2,3,4,5,6,7,8,9}; return A; }
重要提示
如果A是函数内部的非静态局部变量,不要直接返回它的指针:局部变量在函数执行结束后会被系统回收,返回的指针会变成野指针,触发未定义行为。如果确实需要返回内部数组的指针,可以把A声明为static、使用malloc动态分配内存,或者返回外部传入的数组地址。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

