常量传递1

来源:互联网 发布:怎样成为淘宝客服 编辑:程序博客网 时间:2024/05/21 17:10
<pre name="code" class="cpp">const int i = 12;int *j = const_cast<int*>(&i);*j = 13;cout << *j << endl;cout << i << endl;


输出:13 12

const int i = 12;0095466A  mov         dword ptr [i],0Ch  int *j = const_cast<int*>(&i);00954671  lea         eax,[i]  00954674  mov         dword ptr [j],eax  *j = 13;00954677  mov         eax,dword ptr [j]  0095467A  mov         dword ptr [eax],0Dh  cout << *j << endl;00954680  mov         esi,esp  00954682  mov         eax,dword ptr [__imp_std::endl (95A330h)]  00954687  push        eax  00954688  mov         edi,esp  0095468A  mov         ecx,dword ptr [j]  0095468D  mov         edx,dword ptr [ecx]  0095468F  push        edx  00954690  mov         ecx,dword ptr [__imp_std::cout (95A32Ch)]  00954696  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (95A334h)]  0095469C  cmp         edi,esp  0095469E  call        @ILT+420(__RTC_CheckEsp) (9511A9h)  009546A3  mov         ecx,eax  009546A5  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (95A31Ch)]  009546AB  cmp         esi,esp  009546AD  call        @ILT+420(__RTC_CheckEsp) (9511A9h)  cout << i << endl;009546B2  mov         esi,esp  009546B4  mov         eax,dword ptr [__imp_std::endl (95A330h)]  009546B9  push        eax  009546BA  mov         edi,esp  009546BC  push        0Ch009546BE  mov         ecx,dword ptr [__imp_std::cout (95A32Ch)]  009546C4  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (95A334h)]  009546CA  cmp         edi,esp  009546CC  call        @ILT+420(__RTC_CheckEsp) (9511A9h)  009546D1  mov         ecx,eax  009546D3  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (95A31Ch)]  009546D9  cmp         esi,esp  009546DB  call        @ILT+420(__RTC_CheckEsp) (9511A9h)  


看到反汇编的代码可以看到,输出 i 的时候直接替换为了 0Ch (009546BC地址地方)

0 0