C语言小白指针求解惑

fxfxfxfxw 2016-02-02 11:50:57
偶尔小白我遇见了这个问题
#include<stdio.h>
int main()
{
int a[3] , *b,i;
b = a;
for (i = 0; i < 3; i++)
{
*b++ = i + 1;
}
for (i = 0; i < 3; i++)
{
printf("%d", *(b + i));
}
}
请大神解释为什么输出的是地址啊,如果printf("%d", *(b + i));改为printf("%d", *(a + i));就是数字了,按理来说这两个操作时一样的啊
还有我发现如果事先给数组赋值了,然后再用指针再指向数组首地址,那么输出无论用什么都可以了,困扰了一整天了,求解惑
...全文
181 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
biebiechai 2016-02-03
  • 打赏
  • 举报
回复
第二个for中你的b已经溢出数组了
biebiechai 2016-02-03
  • 打赏
  • 举报
回复
b++是会改变b的值而b+i则不会
fxfxfxfxw 2016-02-03
  • 打赏
  • 举报
回复
引用 3 楼 weixin_33887675 的回复:
你把第一个for中的语句改为*(b+I)=I+1; 试一试
确实行了,请问原因
fxfxfxfxw 2016-02-03
  • 打赏
  • 举报
回复
引用 2 楼 weixin_33887675的回复:
楼主你输出的不是地址而是一个乱值,因为再第一个for b已经被改变了,而第二个for你以为b的地址还是a数组第一个元素的地址,建议设两个指针一个用于给数组赋值,一个用于打印,而且*b++也有问题,他导致从不 a[1]开始赋值
请问第二个for b是指向a[1]是吗?
biebiechai 2016-02-03
  • 打赏
  • 举报
回复
楼主你输出的不是地址而是一个乱值,因为再第一个for b已经被改变了,而第二个for你以为b的地址还是a数组第一个元素的地址,建议设两个指针一个用于给数组赋值,一个用于打印,而且*b++也有问题,他导致从不 a[1]开始赋值
biebiechai 2016-02-03
  • 打赏
  • 举报
回复
你把第一个for中的语句改为*(b+I)=I+1; 试一试
qq20004604 2016-02-03
  • 打赏
  • 举报
回复
b是指向数组的指针 *b 是数组
c_map 2016-02-03
  • 打赏
  • 举报
回复
*b++ ; 会改变指针值

70,021

社区成员

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

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