C语言如何在子函数中对主函数中的二维数组值进行修改?二维数组已经在主函数中用动态数组分配了空间.
最佳回答
最新回答共有2条回答
-
2026-04-06 19:16:22老实的小兔子
回复用数组时,必须要知道二维数组的后一个维度,否则无法正确修改,比如: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; m = 5, n = 10; a = (int **) malloc( m*sizeof(int *)); for(int i=0 ; i
热门文章
- 康达学院专转本五年制
- 高考一个考场分ab卷吗
- not only but also用法
- 某物体做自由落体运动,从释放开始计时,则物体在前2s内的平均速度为______m/s,物体下落2m时的速度大小为______m/s.
- 三角函数公式大全表格
- 地理中考必背知识点2022
- 2013-2014学年小学六年级科学上学期期末考试试卷及答案
- 人教版2014-2015学年小学五年级英语第二学期期中教学质量检测试卷及答案
- 【Linux驱动开发】设备树详解(二)设备树语法详解
- 别跟客户扯细节
- 在别的城市买房子能落户吗
- 卖房前要把装修贷还完吗
- 高中政治教学提高教学效果的方法探究
- “互联网+”背景下的初中英语课堂教学改革与创新策略研究
- 2022年终止合同范本
- 租房合同范本范文
- 如何挑选土豆
- 如何挑选土鸡
