| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 505 人关注过本帖
标题:求教输出问题
只看楼主 加入收藏
flyingzc
Rank: 2
等 级:论坛游民
帖 子:22
专家分:13
注 册:2010-4-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
求教输出问题
#include<iostream>
using namespace std;
int main()
{
    int str[10]={6,7,8,9,10};
    int *p;
    p=str;
    *(p++)+=123;
    cout<<*p<<"   "<<*(p++)<<endl;
    return 0;
}
为什么输出结果是8 7
搜索更多相关主题的帖子: 输出 
2010-04-09 12:14
quietstar
Rank: 2
来 自:虚无缥缈处
等 级:论坛游民
帖 子:28
专家分:98
注 册:2009-4-13
收藏
得分:8 
其实上面的代码最关键的是这句cout<<*p<<"   "<<*(p++)<<endl;这句不是先执行*p,而是先执行*(p++),p++语句是先把p的值保存起来,作为p++表达式的值返回,然后再执行指针p再移动一位,指向数组的下一个元素;由于上面这句:*(p++)+=123;p开始是指向第一个元素6,执行该语句后,就指向了第二个元素7,所以*(p++)的值就是7,同时p已经指向第三个元素8,那么cout<<*p这句当然也就输出了8。下面是我验证时写的一段程序:
#include<iostream>
using namespace std;
int main()
{
    int str[10]={6,7,8,9,10};
    int *p;
    p=str;
    cout<<*p<<endl;
    int q = *(p++);
    cout << q <<endl;
    cout << *p <<endl;
    //q += 123;
    cout << q <<endl;
    cout<<*p<<endl;
    cout<<*(p++)<<endl;
    return 0;
}


流光穆然去,美梦随佳人。薄雾似成雨,芳樽清茶冷。郁郁清风外,悠然不复生。
2010-04-09 12:45
月光321
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:124
注 册:2010-3-22
收藏
得分:4 
由于执行完*(p++)+=123;后,就p指针就指向了第二个元素7,所以*(p++)的值就是7,同理
p已经指向第三个元素8,那么cout<<*p这句当然也就输出了8。
这是因为cout输出为一个函数时,先进后出(FILO);
2010-04-09 15:56
yyblackyy
Rank: 6Rank: 6
等 级:侠之大者
帖 子:98
专家分:457
注 册:2010-3-31
收藏
得分:8 
*(p++)+=123; 若楼主不明白可以把这句话理解成
*p=*p+123    str[0]=str[0]+123  str[0]=129;
p=p+1;       指向下一个元素也就是str[1];
 cout<<*p<<"   "<<*(p++)<<endl;这是关键了,这条语句的过程是  把endl 压入栈   *(p++)入栈    "    "入栈       *p入栈。。。
所以先算*(p++);
因为*(p++) 是后置,所以他的地址是str[1]的地址,显示的当然是str[1]的值了,指针下移到str[2]
然后再算*p的值 这时p的值是str[2]的地址了,*p显示的就是str[2]的值了
                     
2010-04-10 11:13
快速回复:求教输出问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033692 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved