遇到 了二维指针的 越界的问题, 各位帮我看看啊! 高分感谢!

xiangxuf 2008-11-12 10:59:15
#include<stdio.h>
int output(int *p,int n,int x)
{ int i,j,k;//i为行控制,j为列控制

for(i=j=k=0;k<x;k++,p++)
{ printf("a[%d][%d]=%2d ",i,j,*p);
{j++;
if(j%n==0) //当j输出4个后换行,并且行数加1
{ i++;
j=0;
printf("\n");
}
}
}

printf("\n");
return 0;
}

void main()
{
int a[10][10],m,n,x,i,j;//m数组行数,n为数组列数

printf("输入数组的行数和列数:\n");
scanf("%d%d",&m,&n);
printf("请输入数组各元素:");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
printf("\n");
printf("你输入的数据为:\n");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
printf("a[%d][%d]=%d ",i,j,a[i][j]);
x=m*n;

printf("\n\n");
printf("整理后的数组为:\n");
output( &a[0][0],n,x);

}
...全文
113 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
feng4206yu 2008-11-12
  • 打赏
  • 举报
回复
是这样的,问题在int a[10][10];这句话上,如果在运行的时候假如我输入m为2,n为3,而在输入数组值的时候,因为会遇到a[1][0] = (输入)之类的操作,这个时候的a中的值根本不是连续的,因为a的第1行只有3个值就转到第2行了,所以你在output函数中一味增加p的值是取不到你所输入的值的...2L的代码是可以的...
xianyuxiaoqiang 2008-11-12
  • 打赏
  • 举报
回复
m,n不限制大小,当然会越界。你数组大小定死了。
xhs_lh04 2008-11-12
  • 打赏
  • 举报
回复
scanf("%d,%d",&m,&n);
之后应该加上判断
while(m>=10||n>=10)
{
fflush(stdin);
scanf("%d,%d",&m,&n);
}

另外
int output(int *p,int n,int x)
{ int i,j,k;//i为行控制,j为列控制
int *tmp = p;
for(i=j=k=0;k <x;k++)
{ printf("a[%d][%d]=%2d ",i,j,*p);
j++;
if(j%n==0) //因为从
{
i++;
p=tmp+i*10;
j=0;
printf("\n");
}
else
++p;
}
printf("\n");
return 0;
}
xiangxuf 2008-11-12
  • 打赏
  • 举报
回复
各位说的是 。 。 明白了!
多米蒂尔 2008-11-12
  • 打赏
  • 举报
回复
因为你定义了a[10][10],a数组的空间分布已经定了,但是输入的时候又只输入了4*4的值(或者其他,反正没有填满a这个2维数组);
然后你想用p指向这个10*10的而为数组的起始位置,想通过p++连续访问你输入的数据:
结果(假如你输入了4*4的值):
p指向a[0][3]的时候你需要换行,行是换了,但是p++指向的是a[0][4],而你想要输出的是a[1][0],知道为什么了吧!

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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