注册 登录
编程论坛 C++教室

求教输出问题

flyingzc 发布于 2010-04-09 12:14, 505 次点击
#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
3 回复
#2
quietstar2010-04-09 12:45
其实上面的代码最关键的是这句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;
}

#3
月光3212010-04-09 15:56
由于执行完*(p++)+=123;后,就p指针就指向了第二个元素7,所以*(p++)的值就是7,同理
p已经指向第三个元素8,那么cout<<*p这句当然也就输出了8。
这是因为cout输出为一个函数时,先进后出(FILO);
#4
yyblackyy2010-04-10 11:13
*(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]的值了
                     
1