C函数调用问题
请教大家一个问题,一般函数返回值都是一个数。
如果需要,如何将整个数组返回呢?
例如(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
// 15 16 17 18 19
//---------------
// 20 21 22 23 24
// 25 26 27 28 29
// 30 31 32 33 34
// 35 36 37 38 39
//---------------
// 40 41 42 43 44
// 45 46 47 48 49
// 50 51 52 53 54
// 55 56 57 58 59
//---------------
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int ***malloc3(int a,int b,int c) {
int ***p;
int i,j;
p=(int ***)malloc(a*sizeof(int **));
if (NULL==p) exit(1);
for (i=0;i<a;i++) {
p[i]=(int **)malloc(b*sizeof(int *));
if (NULL==p[i]) exit(1);
for (j=0;j<b;j++) {
p[i][j]=(int *)malloc(c*sizeof(int));
if (NULL==p[i][j]) exit(1);
}
}
return p;
}
void init(int ***m,int a,int b,int c) {
int i,j,k;
for (i=0;i<a;i++) {
for (j=0;j<b;j++) {
for (k=0;k<c;k++) {
m[i][j][k]=i*b*c+j*c+k;
}
}
}
}
void show(int ***m,int a,int b,int c) {
int i,j,k;
for (i=0;i<a;i++) {
for (j=0;j<b;j++) {
for (k=0;k<c;k++) {
printf(" %2d",m[i][j][k]);
}
printf("\n");
}
printf("---------------\n");
}
}
void free3(int ***m,int a,int b,int c) {
int i,j;
for (i=0;i<a;i++) {
for (j=0;j<b;j++) {
free(m[i][j]);
}
free(m[i]);
}
free(m);
}
int main() {
int ***n;
n=malloc3(3,4,5);
init(n,3,4,5);
show(n,3,4,5);
free3(n,3,4,5);
return 0;
}
// 0 1 2 3 4
// 5 6 7 8 9
// 10 11 12 13 14
// 15 16 17 18 19
//---------------
// 20 21 22 23 24
// 25 26 27 28 29
// 30 31 32 33 34
// 35 36 37 38 39
//---------------
// 40 41 42 43 44
// 45 46 47 48 49
// 50 51 52 53 54
// 55 56 57 58 59
//---------------