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

 我来答
休幻丝0K1
2012-10-31 · TA获得超过354个赞
知道答主
回答量:144
采纳率:0%
帮助的人:60.6万
展开全部
用指针做函数参数可以实现!
追问
这个我也知道,问题是我怎么改都不对,要不我也不会到这来问了。您有没有源码示例一下?谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
skyeg
推荐于2017-12-16 · TA获得超过743个赞
知道小有建树答主
回答量:416
采纳率:0%
帮助的人:350万
展开全部
用数组时,必须要知道二维数组的后一个维度,否则无法正确修改,比如:
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<5 ; i++)
a[i]=(int *) malloc(sizeof(int)*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]转换为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));
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式