二维数组的作为参数的函数引用

RichAndMerry 2018-05-15 01:01:58
请教,为什么下面这个输出结果异常。我原目的是想创建一个复制二维数组的函数和显示二维数组的函数,显示的数组不应该是arr1的值吗?可是它的结果有些不太明白;
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

void copy_2arr(size_t N_length, size_t M_length, int(*)[5], int(*)[5]);
void show_2arr(size_t N_length, size_t M_length, int(*)[5]);

int _tmain(int argc, _TCHAR* argv[])
{
int arr1[3][5] = { { 1, 2, 3, 4, 5 }, { 2, 3, 4 ,5, 6 }, { 7, 8, 9, 10, 11 } };
int arr2[3][5];
copy_2arr(3, 5, arr2, arr1);
show_2arr(3, 5, arr1);
show_2arr(3, 5, arr2);

system("PAUSE");
return 0;
}

void copy_2arr(size_t N_length, size_t M_length, int(*arr_des)[5], int(*arr_sour)[5])
{
for (size_t i = 0; i < N_length; i++)
{
for (size_t i = 0; i < M_length; i++)
{
arr_des[N_length][M_length] = arr_sour[N_length][M_length];
printf(" d_%d ", arr_des[N_length][M_length]);
printf(" s_%d ", arr_sour[N_length][M_length]);
printf("\n");
}
printf("\n");
}
printf("\n");
}
void show_2arr(size_t N_length, size_t M_length, int(*arr_show)[5])
{
for (size_t i = 0; i < N_length; i++)
{
for (size_t i = 0; i < M_length; i++)
{
printf(" %d ", arr_show[N_length][M_length]);
}
printf("\n");
}
printf("\n");
}


结果输出:
d_4029904 s_4029904
d_4029904 s_4029904
d_4029904 s_4029904
d_4029904 s_4029904
d_4029904 s_4029904

d_4029904 s_4029904
d_4029904 s_4029904
d_4029904 s_4029904
d_4029904 s_4029904
d_4029904 s_4029904

d_4029904 s_4029904
d_4029904 s_4029904
d_4029904 s_4029904
d_4029904 s_4029904
d_4029904 s_4029904


4029904 4029904 4029904 4029904 4029904
4029904 4029904 4029904 4029904 4029904
4029904 4029904 4029904 4029904 4029904

4029904 4029904 4029904 4029904 4029904
4029904 4029904 4029904 4029904 4029904
4029904 4029904 4029904 4029904 4029904

请按任意键继续. . .
...全文
541 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2018-05-15
  • 打赏
  • 举报
回复
arr_des[N_length][M_length] = arr_sour[N_length][M_length];
如果这样赋值,那么还需要i, j做什么?另外,这样使用很明显是数组越界了,会导致程序异常。 同理,show函数内的输出一样。
真相重于对错 2018-05-15
  • 打赏
  • 举报
回复
for (size_t i = 0; i < N_length; i++) { for (size_t i = 0; i < M_length; i++)//这里改成 for(size_t j=0;j<M_length;j++) { arr_des[i][j] = arr_sour[i][j]; printf(" d_%d ", arr_des[i][j]); printf(" s_%d ", arr_sour[i][j]); printf("\n"); } printf("\n"); } printf("\n"); 其余类似
destory27 2018-05-15
  • 打赏
  • 举报
回复
arr_des[N_length][M_length] = arr_sour[N_length][M_length]; printf(" %d ", arr_show[N_length][M_length]);
RichAndMerry 2018-05-15
  • 打赏
  • 举报
回复
万分感谢,这种简单的错误,自己明白过来都想吐槽自己,亏我看了好久都没看出哪儿有问题。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧