首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C函数调用有关问题

2013-04-09 
C函数调用问题请教大家一个问题,一般函数返回值都是一个数。如果需要,如何将整个数组返回呢?例如(Cx,Cy,Cz)

C函数调用问题
请教大家一个问题,一般函数返回值都是一个数。
如果需要,如何将整个数组返回呢?
例如(Cx,Cy,Cz)=cir(RR[n_theta],theta[n_theta]);
想要返回的Cx,Cy,Cz都是三维数组,在自定义函数里如何声明,主函数里如何调用呢?
不甚感激~C函数调用有关问题 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
//---------------


[解决办法]
要想返回多个值,那么你需要使用地址传递的形参变量。这样就可以很轻松的解决你的问题了。
[解决办法]
传地址,函数参数用指针的方式。对这个地址存放的值进行修改,自然就能改变任何地方使用到这块地址的变量了的值了
[解决办法]
关于函数调用返回值 从C++ 里面出现了引用开始 都是最好把输入输出参数统一定义在函数参数里面至于函数的额返回值是用来判断函数是否执行成功
C++  int test(int a,int &aa)
输出参数就是aa 返回值判断函数是否成功
在C语言里面 没有引用技术但是有指针的。可以传指针
个人觉得这种编程习惯比较好吧
[解决办法]
你想得到三维数组、就把三维数组的地址传入函数就行了。不用纠结返回什么、并且这样做的好处还避免了返回不该返回的变量啊、地址啊
[解决办法]
指针啊指针,这情况不用指针的话 C 语言你就白学了。
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。

热点排行