c语言2维函数作形参 c二维数组做形参

c语言中怎么用二维数组作为函数参数C语言中
指针做函数参数传递二维数组有两种基本方法:1、传递“数组指针”pre
t="code"
l="cpp"#include
stdio.h
void
output(
int
(*pa)[3],
int
n
)//这个函数只能输出n行3列的二维数组
{
int
i,j;
for(
i=0;in;i++
){
for(
j=0;j3;j++
)
printf("%d
",
pa[i][j]
);
printf("\n");
}
}
void
main()
{
int
a[2][3]={
{1,2,3},
{4,5,6}
};
output(a,2);
}2、传递“指针数组”
先将二维数组的行指针存储到一个指针数组中,再将指针数组传递到子函数中去 。pre
t="code"
l="cpp"#include
stdio.h
void
output(
int
*pa[],
int
row,int
col
)
//这个函数更通用,但调用前,要做好准备工作 。
{
int
i,j;
for(
i=0;irow;i++
){
for(
j=0;jcol;j++
)
printf("%d
",
pa[i][j]
);
printf("\n");
}
}
void
main()
{
int
a[2][3]={
{1,2,3},
{4,5,6}
};
int
i;
int
*pa[2];
for(
i=0;i2;i++
)
pa[i]=a[i];
output(pa,
2,
3);
}
C语言二维动态数组作为函数形参问题调用sum(a,x,m,i)的时候,x还没初始化赋值呢,当然不对了
另外前边的m和n都减一是怎么考虑的,减了一后边用到了m和n,malloc(sizeof(int*)*m)申请的内存还符合m行n列的要求么?
……
m=m-1;
n=n-1;//输出数组行数与列数
a=(float**)malloc(sizeof(int*)*m);
……
*(a+i)=(float*)malloc(sizeof(int)*n);
……
r=(float*)malloc(sizeof(int)*m);
d=(float*)malloc(sizeof(int)*m);
x=(float*)malloc(sizeof(int)*m);
……
c语言c++语言如何用二维数组做形参?C/C++中,二维数组的第一维的每一个元素都是一维数组 。所以,用指向一维数组的指针或用第一维维数空缺的二维数组作为函数的形式参数都能达到目的 。设处理数组为int型,举例代码如下:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
void myprint(int (*p)[5]){//p是指向有5个int型元素的一维数组的指针
//void myprint(int p[][5]){//这样写效果是一样的
int i,j;
for(i=0;i3;i++){
for(j=0;j5;printf("%3d",p[i][j++]));
printf("\n");
}
}
int main(void){
int a[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
myprint(a);
return 0;
}
C语言自定义函数时形参为2维数组,该怎么写?#include iostream
using namespace std;
void Fun(int a[][10])
{
}
int main()
{
int a[10][10];
Fun(a);
}
二维的列必须填写
C语言的二维数组做形参 。要用二维数组做形参,可以void arr(int source[][10],int row);这样声明二位数组传参数的时候,列坐标必须是确定的 , 不然数组寻址的指针操作无法进行,如果一定要动态的行列数,那就用一位数组模拟 。类似这样的:
#include stdio.h
#include stdlib.h
#include memory.h
void foo(int *p, int a, int b);
int main() {
int a, b, *p;
scanf("%d%d", a, b);
p = (int *) malloc ( a * b * sizeof(int));
memset(p, 0, a * b *sizeof(int));
foo(p, a, b);
free(p);
return 0;
}
void foo(int *p, int a, int b) {
int i, j, t;
for (i = 0; ia; i++) {
for (j = 0; jb; j++) {
t = i ? i - 1 : 0;
t = t * a + j;
printf("%d\t", p[t]);
}
putchar('\n');

推荐阅读