指针数组的问题

budaowenglf 2009-07-20 02:05:34
书上的程序
//*********************
//** ch8_6.cpp **
//*********************

#include <iostream.h>

int sum1,sum2,sum3,sum4,sum5; //存放每种方法的结果

int iArray[]={1,4,2,7,13,32,21,48,16,30}; //全局数组
int* iPtr;

void main()
{
int size,n;
size=sizeof(iArray)/sizeof(*iArray); //元素个数

for(n=0; n<size; n++) //方法1
sum1 += iArray[n];

iPtr=iArray;
for(n=0; n<size; n++) //方法2
sum2 += *iPtr++;

iPtr=iArray; //此句不能省略,因为方法2修改了iPtr
for(n=0; n<size; n++) //方法3
sum3 += *(iPtr+n);

iPtr=iArray; //此句可以省略,因为方法3没有修改iPtr
for(n=0; n<size; n++) //方法4
sum4 += iPtr[n];

for(n=0; n<size; n++) //方法5
sum5 += *(iArray+n);

cout <<sum1 <<endl
<<sum2 <<endl
<<sum3 <<endl
<<sum4 <<endl
<<sum5 <<endl;
}



我又自己加了段,不明白为什么不对

for(n=0;n<size;n++) //方法6
sum6 += (*iArray)++;

输出的结果为什么就不对啊?
我知道iArray是数组首地址
...全文
80 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
djj2007 2009-07-20
  • 打赏
  • 举报
回复
for(n=0;n <size;n++) //方法6
sum6 += (*iArray)++;


你这段就算是想写成*Array++也是不对的,Array是const指针,不能++或--的
pengzhixi 2009-07-20
  • 打赏
  • 举报
回复
肯定输出11啊,你都是一直在对array[0]操作。你这样就等于
是array[0]+array[0]+......+array[0]
后面的自增操作使得array[0]的值从1到2一直增加到11
pengzhixi 2009-07-20
  • 打赏
  • 举报
回复
肯定输出11啊,你都是一直在对array[0]操作。你这样就等于
是array[0]+array[0]+......+array[0]
后面的自增操作使得array[0]的值从1到2一直增加到11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 budaowenglf 的回复:]
引用 3 楼 qhd_kw 的回复:
刚才电脑卡,错别字好多啊

iArray是首地址, 所以(*iArray)就代表iArray[0]啊,所以 (*iArray)++,等同于iArray[0]++。因为是你先进行的萃取,再自加的,操作对象变成了iArray[0],对iArray[0]进行自加。


是说(*iArray)就代表iArray[0]吗?那iArray应该等于1!!(*iArray)应该是1,可我加了条
cout < <*iArray;
可输出的是11!
这是怎么回事?
[/Quote]
因为你进行了
for(n=0;n <size;n++) //方法6
sum6 += (*iArray)++;
做了10次循环,每次循环把iArray[0]的值自加一次,这样的话sum6最终的值就是11。
budaowenglf 2009-07-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qhd_kw 的回复:]
刚才电脑卡,错别字好多啊

iArray是首地址, 所以(*iArray)就代表iArray[0]啊,所以 (*iArray)++,等同于iArray[0]++。因为是你先进行的萃取,再自加的,操作对象变成了iArray[0],对iArray[0]进行自加。
[/Quote]

是说(*iArray)就代表iArray[0]吗?那iArray应该等于1!!(*iArray)应该是1,可我加了条
cout<<*iArray;
可输出的是11!
这是怎么回事?
tjj5203 2009-07-20
  • 打赏
  • 举报
回复
楼主不清楚(*iArray)++跟*iArray++的区别哦!
(*iArray)++什么意思楼上的都解释了,*iArray++,是先取*iArray然后iArray(不是*iArray)再自增!
qhd_kw 2009-07-20
  • 打赏
  • 举报
回复
刚才电脑卡,错别字好多啊

iArray是首地址, 所以(*iArray)就代表iArray[0]啊,所以 (*iArray)++,等同于iArray[0]++。因为是你先进行的萃取,再自加的,操作对象变成了iArray[0],对iArray[0]进行自加。
qhd_kw 2009-07-20
  • 打赏
  • 举报
回复
iArray是首地址, 所以(*iArray)就代表iArray[0]啊,所以 (*iArray)++; 等同于iArray[0]++;因为是你选进行的萃取,再自加的,操作对象编程了iArray[0]。
DarkChampion 2009-07-20
  • 打赏
  • 举报
回复
楼主是在对iArray[0]进行++操作
1 + 2 + 3 + ... + 10 = 55

64,666

社区成员

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

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