大神帮看看

yi19861209 2017-03-14 09:32:35
#include<stdio.h>
int main()
{
int i,m[9],*p;
p=m;
for(i=0;i<9;i++)
{
*p++=i; //这里改成“++p”它才不越界,但是多了一个数。
printf("%3d",*p);
}
printf("\n");
return 0;
}
我咸觉“p++”没错啊。
...全文
95 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yi19861209 2017-03-15
  • 打赏
  • 举报
回复
我懂了,谢谢!
赵4老师 2017-03-15
  • 打赏
  • 举报
回复
“多一少一”问题占程序员常犯错误的10%以上! 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个?
自信男孩 2017-03-14
  • 打赏
  • 举报
回复
++p或p++都会导致越界。因为最后一个不论那个运算,都会将指针p向后移动4个字节。
paschen 2017-03-14
  • 打赏
  • 举报
回复
printf("%3d",*p); 的时候,p已经指向了后一个元素了 所以第一个不会被输出,最后一个输出时越界了
vcf_reader 2017-03-14
  • 打赏
  • 举报
回复
应该是取决于编译器吧,建议分两行写: p=i; p++;

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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