C语言如何在子函数中对主函数中的二维数组值进行修改?二维数组已经在主函数中用动态数组分配了空间.

问题描述:

C语言如何在子函数中对主函数中的二维数组值进行修改?二维数组已经在主函数中用动态数组分配了空间.
1个回答 分类:综合 2014-11-01

问题解答:

我来补答
用数组时,必须要知道二维数组的后一个维度,否则无法正确修改,比如:
void modify(int a[][10])
{
a[1][2] = 12;
a[2][5] = 25;
}
void main()
{
int a[5][10];
a[1][2] = 0;
a[2][5] = 0;
modify(a);
printf("a(1,2)=%d,a(2,5)=%d\n",12,25);
}
用指针方式实现时要注意二维数组的建立过程.比如以上的int a[5][10],用指针实现相同功能的代码如下:
void modify(int **a)
{
a[1][2] = 12;
a[2][5] = 25;
}
void main()
{
int **a;
a = (int **) malloc( sizeof(int *) *5);
for(int i=0 ; i
再问: 这样很死板,我想写个通用点的,因为我的二维数组维数在变化,尤其是最后一个维度在变化。如果在子函数的形参中固定了最后一个维度的话,就没有任何灵活性了。我给子函数传了数组的首地址,然后在子函数中用一维数组的形式赋值(我主要是想赋值),但是在主函数中调用数组时值不对,也就是说值并没有被修改,不是说二维数组在内存中也是按列排列的么?难道在子函数中这个列就不管用了?
再答:   如果用二维数组,以上用指针实现的过程中把维数设成变量就可以了,但是这样初始化时稍微有点儿麻烦。    还有一种做法,就是使用一维数组来存储二维数据的值,比如把int a[5][10]转换为int a[50],在读取时进行坐标转换,效果也是一样的,如: int getelement(int *a, int i, int j) { return a[i*10+j]; } void setelement(int *a, int i, int j, int value) { a[i*10+j] = value; } void modify(int *a) { setelement(a, 1, 2, 12); setelement(a, 2, 5, 25); } void main() { int *a; a = (int *) malloc( 5*10*sizeof(int*)); modify(a); printf("a(1,2)=%d, a(2,5)=%d\n",getelement(a,1,2),getelement(a,2,5)); }
再问:  如果用二维数组,以上用指针实现的过程中把维数设成变量就可以了,但是这样初始化时稍微有点儿麻烦 ---------------------- 这点没怎么看明白,能否请您把这个说详细点?有例子更好了。谢谢!
再答: 第一、就是在前面用二维数组实现的例子中,把5和10改成二维数组的行数和列数就可以了,如: int m, n; int **a; /* 二维数组的动态实现只能使用int**类型,这样才可以用a[i][j]方式访问数组元素*/ m = 5, n = 10; /* m 行 n 列的数组 */ a = (int **) malloc( m*sizeof(int *)); /* 这里分配的只是一个指向每一行的指针 */ for(int i=0 ; i
 
 
展开全文阅读
剩余:2000
上一页:圆向量