如何向函数传递二维数组首地址?
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)传递参数? 展开
直接将二维数组首地址传给一个二级指针形参是不可能的,因为二者的类型不同;如果要在创建二级指针空间时给予相应的转换,做起来也是较麻烦的。
有两个办法可借鉴:
传一个一行的指向一维数组的指针给指向数组的指针形参,即传给形参int (*p)[n],当然n必须是已知且不变的;这样很是简单。
干脆把二维数组的首址强制成指向元素的指针传给形参int *p,由于二维数组的行和例已知,在函数中可将其按一维数组处理。如果算上在函数中创建动态二级指针的方法,这三种方法中int (*p)[n]传递和使用都较为简单;强制方法传递容易,使用难一点;二级指针方法创建困难但使用简单。
函数(function),名称出自数学家李善兰的著作《代数学》。之所以如此翻译,他给出的原因是“凡此变数中函彼变数者,则此为彼之函数”,也即函数指一个量随着另一个量的变化而变化,或者说一个量中包含另一个量。
函数的定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同,传统定义是从运动变化的观点出发,而近代定义是从集合、映射的观点出发。
已经指定你的二维数组的第2下标只能是4,所以你的n值只能等于4才能被该函数正确寻址
在n=4的情况下调用函数的语句:max(pnodeCorrdinate,m);
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;
}