二维数组,在函数里面怎么定义?

雪落刀光 2013-05-20 11:53:08
行和列都是传进来的参数,是可变的,
如函数
void fun(float A,int row,int col)
{
中间要生成二维数组
A[row][col]
上面的float A 要怎么写呢?
是*A,还是别的什么?
还有,A[row][col]也通不过
说什么下标未知,我试了,
即使在这里面给row,col赋值了,还是那个错
要怎么解决呢?
求C大神。。。
}
...全文
759 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-05-22
  • 打赏
  • 举报
回复
仅供参考
//在堆中开辟一个4×5的二维int数组
#include <stdio.h>
#include <malloc.h>
int **p;
int i,j;
void main() {
    p=(int **)malloc(4*sizeof(int *));
    if (NULL==p) return;
    for (i=0;i<4;i++) {
        p[i]=(int *)malloc(5*sizeof(int));
        if (NULL==p[i]) return;
    }
    for (i=0;i<4;i++) {
        for (j=0;j<5;j++) {
            p[i][j]=i*5+j;
        }
    }
    for (i=0;i<4;i++) {
        for (j=0;j<5;j++) {
            printf(" %2d",p[i][j]);
        }
        printf("\n");
    }
    for (i=0;i<4;i++) {
        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
hugett 2013-05-21
  • 打赏
  • 举报
回复
二维数组作为参数一定要指定列数。。
void fun(int a[][10]);//可以传一个列数为10的二维数组作为实参。。
cocoabird 2013-05-21
  • 打赏
  • 举报
回复
引用 1 楼 hnwyllmm 的回复:
一维数组当二维数组用,这样写: float *a = (float*)malloc(sizeof(float) * row * col); 获取第i行第j个元素这样写: a[(i-1)*col + j-1];
++
lniwn 2013-05-21
  • 打赏
  • 举报
回复
二维数组当参数传递的时候必须要指定第二维也就是列数。 或者按照1楼的方法,用一维数组代替,效果是一样的。
geekjack 2013-05-21
  • 打赏
  • 举报
回复
引用 7 楼 j12y12x12 的回复:
用一维数组貌似不行啊,因为最后要返回的是一个row×col的矩阵
LZ,楼上几位回复是可用的。 一维、二维都是可以的。 你如果一定要返回的是一个row*col的矩阵,那就用#6提供的方法。 我觉得可能是你代码的问题哦。 可以贴出来看一下。
羽飞 2013-05-21
  • 打赏
  • 举报
回复
一维数组当二维数组用,这样写: float *a = (float*)malloc(sizeof(float) * row * col); 获取第i行第j个元素这样写: a[(i-1)*col + j-1];
雪落刀光 2013-05-21
  • 打赏
  • 举报
回复
用一维数组貌似不行啊,因为最后要返回的是一个row×col的矩阵
baichi4141 2013-05-21
  • 打赏
  • 举报
回复
放弃二维甚至多维数组吧,那种东西一点用都没有 用一维数组来代替多维数组,自己计算每维偏移
雪落刀光 2013-05-21
  • 打赏
  • 举报
回复
*kpdata是matlab传进来的矩阵,matlab和C的存储方式不一样,我这里当一维数组存储来了,也不知道对不对,还有就是要返给matlab的result矩阵,行列都是matlab里面传进来的,这样可以灵活些,如果在这里面定义就只能针对一种矩阵了,num是传进来的kpdata矩阵的行数*/
雪落刀光 2013-05-21
  • 打赏
  • 举报
回复
我这是matlab和C混合编程,mex文件的编写,不知道论坛有这方面的大神没,有的话求指点的,搞了好久都没好。。

#include "mex.h"
#include "math.h"
#define pi 3.14159

void parzen(const double kpdata[] ,double **result,int row,int col,int num)/*kpdata是matlab传进来的矩阵,matlab和C的存储方式不一样,我这里当一维数组存储来了,也不知道对不对,还有就是要返给matlab的result矩阵,行列都是matlab里面传进来的,这样可以灵活些,如果在这里面定义就只能针对一种矩阵了,num是传进来的kpdata矩阵的行数*/
{
    double m1;
    double m2;
    double s;
    double y;
    //int num,row,col;
    int i,j,a; 
    //result[row][col]={};
    for (i=0;i<=row-1;i++)
    {  
        for (j = 0;j<=col-1;j++)
        {   
            y = 0;
            for (a =0;a<=num-1;a++)
            { 
                m1 = kpdata[a];
                m2 = kpdata[a+num];
                s = kpdata[a+2*num];
                y = y+(1/(2*pi*s*s)*exp((-1/2)*(((i- m1)*(i-m1))/(s*s)+((j-m2)*

(j-m2))/(s*s)))); 
            }
            result[i][j] = y;
        }
    }
}

void mexFunction(int nlhs,mxArray *plhs[],int nrhs, const mxArray *prhs[])
{
    double **result,*kpdata;
    //double *p1,*p2,*p3;
    //double temp;
    int M1,N1;
    int row,col,num;

    if(nrhs != 4)
        mexErrMsgTxt("Four inputs required.");
    else 
    {
        M1 = mxGetM(prhs[0]); printf("M1=%d\n",M1);
        N1 = mxGetN(prhs[0]); printf("N1=%d\n",N1);
        row = mxGetPr(plhs[1]);
        col = mxGetPr(plhs[2]);
        num = mxGetPr(plhs[3]);        
        //row = *p1;  
        //col = *p2;  
        //num = *p3;  
        printf("row=%d\n",row);
        printf("col=%d\n",col);
        printf("num=%d\n",num);//检验
    }
     
        
       if(nlhs > 1)
        mexErrMsgTxt("Too many outputs arguments.");
     
   
   if(!mxIsDouble(prhs[0]) || mxIsComplex(prhs[0]))
    mexErrMsgTxt("Inputs must be all noncomplex double.");


   plhs[0] = mxCreateDoubleMatrix(row,col,mxREAL);
 
   kpdata = mxGetPr(prhs[0]);
   result = mxGetPr(plhs[0]);
   parzen(kpdata,result,row,col,num);
}
qhpxy 2013-05-21
  • 打赏
  • 举报
回复

float ** a;
   a=(float**)malloc(sizeof(float*)*row);
for(int i=0;i<row;i++){
   a[i]=(float *)malloc(sizeof(float)*col);
}
这样写不容易出错,虽然效率没有1楼高
sundq12 2013-05-21
  • 打赏
  • 举报
回复
看看这个帖子:http://bbs.csdn.net/topics/390457707

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧