C++基礎回顧-字串地址比較

來源:互聯網
上載者:User
char str1[]       = "abc";char str2[]       = "abc";const char str3[] = "abc"; const char str4[] = "abc"; const char* str5  = "abc";const char* str6  = "abc";cout << boolalpha << ( str1==str2 ) << endl; // 輸出什嗎?cout << boolalpha << ( str3==str4 ) << endl; // 輸出什嗎?cout << boolalpha << ( str5==str6 ) << endl; // 輸出什嗎?

輸出結果是什麼?

falsefalsetrue

why?反組譯碼看看

char str1[]       = "abc";00CD163E  mov         eax,dword ptr [string "abc" (0CD9A40h)]  //將abc字串(靜態地址)00CD1643  mov         dword ptr [str1],eax //str1地址 0x0018fd00 char str2[]       = "abc";00CD1646  mov         eax,dword ptr [string "abc" (0CD9A40h)]  00CD164B  mov         dword ptr [str2],eax  //str2地址 0x0018fcf4 const char str3[] = "abc"; 00CD164E  mov         eax,dword ptr [string "abc" (0CD9A40h)]  00CD1653  mov         dword ptr [str3],eax  //str3地址 0x0018fce8const char str4[] = "abc"; 00CD1656  mov         eax,dword ptr [string "abc" (0CD9A40h)]  00CD165B  mov         dword ptr [str4],eax  //str4地址 0x0018fcdcconst char* str5  = "abc";00CD165E  mov         dword ptr [str5],offset string "abc" (0CD9A40h)  //str5指向0CD9A40hconst char* str6  = "abc";00CD1665  mov         dword ptr [str6],offset string "abc" (0CD9A40h)  //str6指向0CD9A40hcout << boolalpha << ( str1==str2 ) << endl; // 輸出什嗎?00CD166C  mov         esi,esp  00CD166E  mov         eax,dword ptr [__imp_std::endl (0CDD31Ch)]  00CD1673  push        eax  00CD1674  lea         ecx,[str1]  00CD1677  lea         edx,[str2]  00CD167A  cmp         ecx,edx  00CD167C  sete        al  00CD167F  mov         edi,esp  00CD1681  movzx       ecx,al  00CD1684  push        ecx  00CD1685  mov         ebx,esp  00CD1687  push        offset std::boolalpha (0CD1113h)  00CD168C  mov         ecx,dword ptr [__imp_std::cout (0CDD318h)]  00CD1692  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0CDD30Ch)]  00CD1698  cmp         ebx,esp  00CD169A  call        @ILT+505(__RTC_CheckEsp) (0CD11FEh)  00CD169F  mov         ecx,eax  00CD16A1  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0CDD308h)]  00CD16A7  cmp         edi,esp  00CD16A9  call        @ILT+505(__RTC_CheckEsp) (0CD11FEh)  00CD16AE  mov         ecx,eax  00CD16B0  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0CDD310h)]  00CD16B6  cmp         esi,esp  00CD16B8  call        @ILT+505(__RTC_CheckEsp) (0CD11FEh)  cout << boolalpha << ( str3==str4 ) << endl; // 輸出什嗎?00CD16BD  mov         esi,esp  00CD16BF  mov         eax,dword ptr [__imp_std::endl (0CDD31Ch)]  00CD16C4  push        eax  00CD16C5  lea         ecx,[str3]  00CD16C8  lea         edx,[str4]  00CD16CB  cmp         ecx,edx  00CD16CD  sete        al  00CD16D0  mov         edi,esp  00CD16D2  movzx       ecx,al  00CD16D5  push        ecx  00CD16D6  mov         ebx,esp  00CD16D8  push        offset std::boolalpha (0CD1113h)  00CD16DD  mov         ecx,dword ptr [__imp_std::cout (0CDD318h)]  00CD16E3  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0CDD30Ch)]  00CD16E9  cmp         ebx,esp  00CD16EB  call        @ILT+505(__RTC_CheckEsp) (0CD11FEh)  00CD16F0  mov         ecx,eax  00CD16F2  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0CDD308h)]  00CD16F8  cmp         edi,esp  00CD16FA  call        @ILT+505(__RTC_CheckEsp) (0CD11FEh)  00CD16FF  mov         ecx,eax  00CD1701  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0CDD310h)]  00CD1707  cmp         esi,esp  00CD1709  call        @ILT+505(__RTC_CheckEsp) (0CD11FEh)  cout << boolalpha << ( str5==str6 ) << endl; // 輸出什嗎?00CD170E  mov         esi,esp  00CD1710  mov         eax,dword ptr [__imp_std::endl (0CDD31Ch)]  00CD1715  push        eax  00CD1716  mov         ecx,dword ptr [str5]  00CD1719  cmp         ecx,dword ptr [str6]  00CD171C  sete        dl  00CD171F  mov         edi,esp  00CD1721  movzx       eax,dl  00CD1724  push        eax  00CD1725  mov         ebx,esp  00CD1727  push        offset std::boolalpha (0CD1113h)  00CD172C  mov         ecx,dword ptr [__imp_std::cout (0CDD318h)]  00CD1732  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0CDD30Ch)]  00CD1738  cmp         ebx,esp  00CD173A  call        @ILT+505(__RTC_CheckEsp) (0CD11FEh)  00CD173F  mov         ecx,eax  00CD1741  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0CDD308h)]  00CD1747  cmp         edi,esp  00CD1749  call        @ILT+505(__RTC_CheckEsp) (0CD11FEh)  00CD174E  mov         ecx,eax  00CD1750  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0CDD310h)]  00CD1756  cmp         esi,esp  00CD1758  call        @ILT+505(__RTC_CheckEsp) (0CD11FEh)  

 

所以這裡

 

str1(0x0018fd00)!=str2(0x0018fcf4)

 

str3(0x0018fce8)!=str4(0x0018fcdc)

str5(0x0CD9A40h)==str6(0x0CD9A40h)

結果為

false

false

true  

 

 

 

  

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.