如何向函数传递二维数组首地址?

通过pnodeCoordinate=(double**)malloc(m*sizeof(double*));//创建动态二维数组存储单元各个结点坐标for(i=0;i<m... 通过
pnodeCoordinate=(double**)malloc(m*sizeof(double*)); //创建动态二维数组存储单元各个结点坐标
for(i=0;i<m;i++)
pnodeCoordinate[i]=(double*)malloc(n*sizeof(double));
定义一个二维数组,如何向这个函数 max(double a[][4],int n)传递参数?
展开
 我来答
White_MouseYBZ
2014-04-03 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6640万
展开全部
直接将二维数组首地址传给一个二级指针形参是不可能的,因为二者的类型不同;如果要在创建二级指针空间时给予相应的转换,做起来也是较麻烦的。有两个办法可借鉴:一是传一个一行的指向一维数组的指针给指向数组的指针形参,即传给形参int (*p)[n],当然n必须是已知且不变的;这样很是简单。二是干脆把二维数组的首址强制成指向元素的指针传给形参int *p,由于二维数组的行和例已知,在函数中可将其按一维数组处理。如果算上在函数中创建动态二级指针的方法,这三种方法中int (*p)[n]传递和使用都较为简单;强制方法传递容易,使用难一点;二级指针方法创建困难但使用简单。这几种方法在下都用过,纯系个人看法,供参考……
fly勇敢的心120
2015-11-15 · TA获得超过2.1万个赞
知道大有可为答主
回答量:6968
采纳率:76%
帮助的人:541万
展开全部

  直接将二维数组首地址传给一个二级指针形参是不可能的,因为二者的类型不同;如果要在创建二级指针空间时给予相应的转换,做起来也是较麻烦的。

  有两个办法可借鉴:

  1. 传一个一行的指向一维数组的指针给指向数组的指针形参,即传给形参int (*p)[n],当然n必须是已知且不变的;这样很是简单。

  2. 干脆把二维数组的首址强制成指向元素的指针传给形参int *p,由于二维数组的行和例已知,在函数中可将其按一维数组处理。如果算上在函数中创建动态二级指针的方法,这三种方法中int (*p)[n]传递和使用都较为简单;强制方法传递容易,使用难一点;二级指针方法创建困难但使用简单。

  函数(function),名称出自数学家李善兰的著作《代数学》。之所以如此翻译,他给出的原因是“凡此变数中函彼变数者,则此为彼之函数”,也即函数指一个量随着另一个量的变化而变化,或者说一个量中包含另一个量。

  函数的定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同,传统定义是从运动变化的观点出发,而近代定义是从集合、映射的观点出发。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2015-11-11 · TA获得超过3.1万个赞
知道大有可为答主
回答量:6571
采纳率:86%
帮助的人:913万
展开全部
直接将二维数组首地址传给一个二级指针形参是不可能的,因为二者的类型不同;如果要在创建二级指针空间时给予相应的转换,做起来也是较麻烦的。有两个办法可借鉴:一是传一个一行的指向一维数组的指针给指向数组的指针形参,即传给形参int (*p)[n],当然n必须是已知且不变的;这样很是简单。二是干脆把二维数组的首址强制成指向元素的指针传给形参int *p,由于二维数组的行和例已知,在函数中可将其按一维数组处理。如果算上在函数中创建动态二级指针的方法,这三种方法中int (*p)[n]传递和使用都较为简单;强制方法传递容易,使用难一点;二级指针方法创建困难但使用简单。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdyzxy
2014-04-03 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3741万
展开全部
函数max(double a[][4],int n)
已经指定你的二维数组的第2下标只能是4,所以你的n值只能等于4才能被该函数正确寻址
在n=4的情况下调用函数的语句:max(pnodeCorrdinate,m);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoaxa
2014-04-02 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3481万
展开全部
double max(double **a, int m, int n) { // 这样声明形参就可以了
    // ......
}
更多追问追答
追问
函数就按我的定义来,如何传递?
追答

1、实参是二级指针,形参也必须是二级指针,不能用类似于a[M][N]或a[][N]的二维数组传递方式,否则编译器会报错。

2、如果形参是二维数组,那么实参也必须是二维数组。

3、变通的方法是,申请一个存储空间为m×n个数据的一维数组ar,调用格式是 int max(arr,m,n);,函数头是int max(int *a, int m, int n);,通过下标的掌控也可以当作二维数组来操作。但对于max()函数来说,用一维数组实现起来反而更简便。

int max(int *intp,int m, int n) {
    int i,max = intp[0];
    for(i = 1; i < m * n; ++i)
        if(intp[i] > max) max = intp[i];
    return max;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式