请大家指点一下

nginxing 2011-12-23 11:19:47
#include <iostream>
using namespace std;
int main ()
{
int a[]={1,3,5,7,9,11,13,15};
int *p=a;

cout<<*p<<"\n"<<*p++<<endl;
return 0;
}



输出结果为3,1 有点不解
...全文
50 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shun_qizi_ran 2011-12-23
  • 打赏
  • 举报
回复
指针和数组
nginxing 2011-12-23
  • 打赏
  • 举报
回复
能解释一下是怎么样压栈的吗?我刚接触c++,还不是很清楚
Gloveing 2011-12-23
  • 打赏
  • 举报
回复
1先压栈,3后压栈
Gloveing 2011-12-23
  • 打赏
  • 举报
回复
cout<<*p<<"\n"<<*p++<<endl;
004015C6 68 C8 10 40 00 push offset @ILT+195(std::endl) (004010c8)
004015CB 8B 4D DC mov ecx,dword ptr [ebp-24h]
004015CE 8B 11 mov edx,dword ptr [ecx]
004015D0 89 55 D8 mov dword ptr [ebp-28h],edx
004015D3 8B 45 D8 mov eax,dword ptr [ebp-28h]
004015D6 50 push eax
004015D7 8B 4D DC mov ecx,dword ptr [ebp-24h]
004015DA 83 C1 04 add ecx,4
004015DD 89 4D DC mov dword ptr [ebp-24h],ecx

004015E0 68 1C E0 46 00 push offset string "\n" (0046e01c)
004015E5 8B 55 DC mov edx,dword ptr [ebp-24h]
004015E8 8B 02 mov eax,dword ptr [edx]
004015EA 50 push eax
004015EB B9 90 BE 47 00 mov ecx,offset std::cout (0047be90)
004015F0 E8 0A FB FF FF call @ILT+250(std::basic_ostream<char,std::char_traits<char> >::operator<<) (004010ff)
004015F5 50 push eax
004015F6 E8 8A FC FF FF call @ILT+640(std::operator<<) (00401285)
004015FB 83 C4 08 add esp,8
004015FE 8B C8 mov ecx,eax
00401600 E8 FA FA FF FF call @ILT+250(std::basic_ostream<char,std::char_traits<char> >::operator<<) (004010ff)
00401605 8B C8 mov ecx,eax
00401607 E8 D4 FB FF FF call @ILT+475(std::basic_ostream<char,std::char_traits<char> >::operator<<) (004011e0)
Gloveing 2011-12-23
  • 打赏
  • 举报
回复
cout<<*p++<<endl;//是先 *p, 在 p++
cout<<*++p<<endl;//是先 p++,在 *p
ReMeppo 2011-12-23
  • 打赏
  • 举报
回复
按照输出应该是从右往左的顺序 :
(1)*p++ 按优先顺序 应该是p先与 ++结合,但是是后++,所以取出p的值,输出 *p = 1 然后 p+1,
(2) (1)中的p+1后 p向后移动了一个sizeof(int)的位置 , p当然指向了3撒,这时候再输出*p , *p = 3 ! 不知道讲清楚没

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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