c指针自加问题

zidane-R10 2014-03-22 07:24:44

# include<stdio.h>

int main()
{
int a[5];
int * p;
p=a;
for (int i =0; i<5; i++)
scanf("%d",p++);
for (int i=0; i<5; i++,p++)
printf("%d ",*p);
printf("\n");
return 0;
}

为什么这个写法回报错呢。谭浩强说第一次循环就越界了,但是为什么呢为什么呢,第一次自加结果不应该是增加四个字节才对吗?
...全文
379 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010460643 2015-11-21
  • 打赏
  • 举报
回复
P 是指向int型的指针,p++等价于 p = p当前值 + sizeof(int); 第一个for循环执5次,p++执行了5次,在执行第二个for以前 p已经指向了a[4]之后,即 p == &a + 5*sizeof(int),明显p指向 的单元已经超出了数组的范围
均陵鼠侠 2014-03-23
  • 打赏
  • 举报
回复
1:指针是int类型,自加一次应该是增加一个int长度 -------------------------------------------------------------------- 指针是指针,int是int,指针怎么变成int了……
sjtcumt 2014-03-23
  • 打赏
  • 举报
回复

# include<stdio.h>
#include <iostream>
using namespace std;
int main()
{
int a[5];
int * p =&a[0];
cout<<p<<" "<<p+1<<endl;
int *pp =a;
cout<<pp<<" "<<pp+1<<endl;
int (*ppp)[5] =&a;
cout<<ppp<<" "<<ppp+1<<endl;


for (int i =0; i<5; i++)
{
scanf("%d",p+i);
}

for (int j=0; j<5; j++)
{
printf("%d ",*(p+j));
}
printf("\n");



int cc;
cin>>cc;
return 0;
}





1:指针是int类型,自加一次应该是增加一个int长度
2:楼主的p一直在执行自加操作,不论是一个int长度,还是数组长度,都不可能输出正确结果
3:要想自加一次增加一个数组长度,就要将指针定义为指向数组的指针,
rendason 2014-03-22
  • 打赏
  • 举报
回复
引用 3 楼 zhb111hy 的回复:
那指针是int类型,自加一次不应该是增加一个int长度吗? 按照谭浩强的解释就是增加了一个数组的长度,不明白不明白
自加一次是增加一个int长度,数组有5个int长度
zidane-R10 2014-03-22
  • 打赏
  • 举报
回复
引用 2 楼 piaobotudou 的回复:
他应该是这个意思,就是第一次循环结束后已经越界
对,他的意思就是这样的,我也就因为这个纠结了……&
zidane-R10 2014-03-22
  • 打赏
  • 举报
回复
那指针是int类型,自加一次不应该是增加一个int长度吗? 按照谭浩强的解释就是增加了一个数组的长度,不明白不明白
微型蚂蚁 2014-03-22
  • 打赏
  • 举报
回复
他应该是这个意思,就是第一次循环结束后已经越界
微型蚂蚁 2014-03-22
  • 打赏
  • 举报
回复
第二次循环前p已经等于p+5了,所以已经越界

70,026

社区成员

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

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