C函数调用有关问题
C函数调用问题
请教大家一个问题,一般函数返回值都是一个数。
如果需要,如何将整个数组返回呢?
例如(Cx,Cy,Cz)=cir(RR[n_theta],theta[n_theta]);
想要返回的Cx,Cy,Cz都是三维数组,在自定义函数里如何声明,主函数里如何调用呢?
不甚感激~
------解决方案--------------------
返回单指针(三维数组的首地址)就可以了,最好再附带维数信息,可以考虑所有返回信息统一放在结构体里,不过你的数组应该是动态开辟的空间才可以,外部调用完后需要负责释放函数开辟的空间
------解决方案--------------------
对于函数除进程创建外返回值不大于一个,但是可以对这个值做变通达到返回多值的效果。如你可以将其打包为结构体,也可以开辟成数组返回指针等等。我觉得没必要帮你写代码了吧。
------解决方案--------------------
使用结构体。
------解决方案--------------------
用指针吧。C就这么点好处,不用不浪费了
------解决方案--------------------
当返回的参数超过1个的时候就可以考虑用结构体了。
------解决方案--------------------
仅供参考
请教大家一个问题,一般函数返回值都是一个数。
如果需要,如何将整个数组返回呢?
例如(Cx,Cy,Cz)=cir(RR[n_theta],theta[n_theta]);
想要返回的Cx,Cy,Cz都是三维数组,在自定义函数里如何声明,主函数里如何调用呢?
不甚感激~
C
函数调用
------解决方案--------------------
返回单指针(三维数组的首地址)就可以了,最好再附带维数信息,可以考虑所有返回信息统一放在结构体里,不过你的数组应该是动态开辟的空间才可以,外部调用完后需要负责释放函数开辟的空间
------解决方案--------------------
对于函数除进程创建外返回值不大于一个,但是可以对这个值做变通达到返回多值的效果。如你可以将其打包为结构体,也可以开辟成数组返回指针等等。我觉得没必要帮你写代码了吧。
------解决方案--------------------
使用结构体。
------解决方案--------------------
用指针吧。C就这么点好处,不用不浪费了
------解决方案--------------------
当返回的参数超过1个的时候就可以考虑用结构体了。
------解决方案--------------------
仅供参考
//在堆中开辟一个3×4×5的3维int数组
#include <stdio.h>
#include <malloc.h>
int ***p;
int i,j,k;
void main() {
p=(int ***)malloc(3*sizeof(int **));
if (NULL==p) return;
for (i=0;i<3;i++) {
p[i]=(int **)malloc(4*sizeof(int *));
if (NULL==p[i]) return;
for (j=0;j<4;j++) {
p[i][j]=(int *)malloc(5*sizeof(int));
if (NULL==p[i][j]) return;
}
}
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
for (k=0;k<5;k++) {
p[i][j][k]=i*20+j*5+k;
}
}
}
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
for (k=0;k<5;k++) {
printf(" %2d",p[i][j][k]);
}
printf("\n");
}
printf("---------------\n");
}
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
free(p[i][j]);
}
free(p[i]);
}
free(p);
}
// 0 1 2 3 4
// 5 6 7 8 9
// 10 11 12 13 14