user-0 提问: 二维数组删除指定元素

回复:
user: user-0
content: 引用 12 楼 自信男孩的回复:删除其实就可以理解为覆盖，即将后面的元素直接以此覆盖前面的元素，这样可以打到删除的目的。注意要修改数组长度，不然，最后的元素还是上次元素的值。 还有其他的做法？

user: user-1
content: 删除其实就可以理解为覆盖，即将后面的元素直接以此覆盖前面的元素，这样可以打到删除的目的。注意要修改数组长度，不然，最后的元素还是上次元素的值。

user: user-2
content: 引用 13 楼 其实一开始我是拒绝的 的回复:[quote=引用 12 楼 自信男孩的回复:]删除其实就可以理解为覆盖，即将后面的元素直接以此覆盖前面的元素，这样可以打到删除的目的。注意要修改数组长度，不然，最后的元素还是上次元素的值。 还有其他的做法？[/quote] 总的来说都一样的，只是先删除再赋值和直接把后面的值赋给前面的区别，你要是想写，这是规定了不能加变量，如果没规定都可以新建一个一维数组得到二维数组所有的值，然后对一维数组操作，最后再依次赋给二维数组

user: user-0
content: 引用 10 楼 user-3的回复:【1】 *a[count++]  改为 (*a)[count++]; //用(*a)取a[0]地址优先 或者改为 a[0][count++]; //直接用a[0]地址 谢谢，我懂了

user: user-3
content: 【1】 *a[count++]  改为 (*a)[count++]; //用(*a)取a[0]地址优先 或者改为 a[0][count++]; //直接用a[0]地址

user: user-3
content: *a[count++]是把二维数组改成一维数组，二维数组第一个元素地址&a[0][0]==(a[0]+0)==(*a+0)，即a[0][0]==(*a)[0]，第二个元素地址&a[0][1]==(a[0]+1)==(*a+1)即a[0][1]==(*a)[1]，第三个元素a[0][2]==(a[0]+2)==(*a+2)即a[0][2]==(*a)[2]，等等，可见第n个元素就是(*a)[n] 纠正一下 【1】 *a[count++] 改为 (*a)[count++]

user: user-0
content: 引用 7 楼 user-3的回复:那是二维数组下标和一维数组下标的换算关系。也就是二维数组下标转成一维数组下标。 比如二维数组第一行第二个元素，i为0，j为1，i*5+j=1，所以转成一维数组就是第二个元素（一维数组下标为1对应的元素） 再比如第三行第四个元素，i为2，j为3，i*5+j=13，所以转成一维数组就是第十四个元素（一维数组下标为13对应的元素），你可以自己数数，二维数组第二行结束就有10个元素，再加上第三行的第四个元素，是不是就是第14个元素？ 所以 ，一维数组的下标=二维数组的行下标*每行的元素个数+二维数组的列下标 因为有删除，所以最终数组只有count个元素，所以换算成一维数组下标后不能超过count，超过count以后的元素属于被删除的垃圾元素（删除挪位后，count以后的元素属于多余的，不应该打印，所以用了个if判断） 那*a【count++】这不是将a【i】【j】赋给它，也就是有count行，这个*a【count++】是每一行第一个元素？

user: user-3
content: 那是二维数组下标和一维数组下标的换算关系。也就是二维数组下标转成一维数组下标。 比如二维数组第一行第二个元素，i为0，j为1，i*5+j=1，所以转成一维数组就是第二个元素（一维数组下标为1对应的元素） 再比如第三行第四个元素，i为2，j为3，i*5+j=13，所以转成一维数组就是第十四个元素（一维数组下标为13对应的元素），你可以自己数数，二维数组第二行结束就有10个元素，再加上第三行的第四个元素，是不是就是第14个元素？ 所以 ，一维数组的下标=二维数组的行下标*每行的元素个数+二维数组的列下标 因为有删除，所以最终数组只有count个元素，所以换算成一维数组下标后不能超过count，超过count以后的元素属于被删除的垃圾元素（删除挪位后，count以后的元素属于多余的，不应该打印，所以用了个if判断）

user: user-0
content: 引用 5 楼 其实一开始我是拒绝的的回复:[quote=引用 4 楼 其实一开始我是拒绝的的回复:][quote=引用 3 楼 user-3的回复:][quote=引用 2 楼 其实一开始我是拒绝的 的回复：][quote=引用 1 楼 user-3的回复:]【1】 *a[count++] = a[i][j];   【2】 for(j=0; j<5; j++)     if (i*5+j < count)         printf(“%3d”, a[i][j]); 题目还说每输出5个换行，这怎么搞？[/quote]题目给出的代码里不是自带换行了吗 for i 循环下不是有个 printf(“\n”); 吗，意思就是for i 循环5行，每行都打印一个换行 [/quote] 为什么二维数组可以用一维的表示？[/quote] *a【count++】这一步是这么搞的[/quote] i*5+j能不能解释一下？

user: user-0
content: 引用 4 楼 其实一开始我是拒绝的的回复:[quote=引用 3 楼 user-3的回复:][quote=引用 2 楼 其实一开始我是拒绝的 的回复：][quote=引用 1 楼 user-3的回复:]【1】 *a[count++] = a[i][j];   【2】 for(j=0; j<5; j++)     if (i*5+j < count)         printf(“%3d”, a[i][j]); 题目还说每输出5个换行，这怎么搞？[/quote]题目给出的代码里不是自带换行了吗 for i 循环下不是有个 printf(“\n”); 吗，意思就是for i 循环5行，每行都打印一个换行 [/quote] 为什么二维数组可以用一维的表示？[/quote] *a【count++】这一步是这么搞的

user: user-0
content: 引用 3 楼 user-3的回复:[quote=引用 2 楼 其实一开始我是拒绝的 的回复：][quote=引用 1 楼 user-3的回复:]【1】 *a[count++] = a[i][j];   【2】 for(j=0; j<5; j++)     if (i*5+j < count)         printf(“%3d”, a[i][j]); 题目还说每输出5个换行，这怎么搞？[/quote]题目给出的代码里不是自带换行了吗 for i 循环下不是有个 printf(“\n”); 吗，意思就是for i 循环5行，每行都打印一个换行 [/quote] 为什么二维数组可以用一维的表示？

user: user-3
content: 引用 2 楼 其实一开始我是拒绝的 的回复：[quote=引用 1 楼 user-3的回复:]【1】 *a[count++] = a[i][j];   【2】 for(j=0; j<5; j++)     if (i*5+j < count)         printf(“%3d”, a[i][j]); 题目还说每输出5个换行，这怎么搞？[/quote]题目给出的代码里不是自带换行了吗 for i 循环下不是有个 printf(“\n”); 吗，意思就是for i 循环5行，每行都打印一个换行

user: user-0
content: 引用 1 楼 user-3的回复:【1】 *a[count++] = a[i][j];   【2】 for(j=0; j<5; j++)     if (i*5+j < count)         printf(“%3d”, a[i][j]); 题目还说每输出5个换行，这怎么搞？

user: user-3
content: 【1】 *a[count++] = a[i][j];   【2】 for(j=0; j<5; j++)     if (i*5+j < count)         printf(“%3d”, a[i][j]);