c++程式員經典面試題(2)

來源:互聯網
上載者:User

標籤:c++

1.下面程式的輸出結果是?

#include<stdio.h>

main(){

int b=3;

int arr[]={6,7,8,9,10};

int *ptr=arr;

*(ptr++)+=123;

printf("%d,%d\n",*ptr,*(++ptr));

}

答案:

8,8

c中printf計算參數時是從右至左壓棧的。

2.下面程式的輸出結果?

#include<iostream>
using namespace std;
int main(){
float a = 1.0f;
cout << (int)a << endl;
cout << &a << endl;
cout << (int&)a << endl;
cout << "boolalpha" << ((int)a == (int&)a) << endl;
cout << endl;
cout << endl;
float b = 0.0;
cout << (int)b << endl;
cout << &b << endl;
cout << (int&)b << endl;
cout << "boolalpha" << ((int)b == (int&)b) << endl;
getchar();
return 0;
}

答案:


(int )a 是把記憶體中單元的值從其他類型解析為int類型,並建立一個臨時對象。(int &)a 是告訴c++記憶體中是一個int類型,並返回一個引用對象。
(int&)a == static_cast<int&>(a)(int)&a == reinterpret_cast<int>(&a);(int&)a 不經過轉換, 直接得到a在記憶體單元的值(int)a a在記憶體中的值轉換成int類型float類型在記憶體中儲存的形式是 ,符號位 指數 尾數由754標準:階碼採用增碼(該數補碼的反符號),尾數採用原碼所以1.0f 在記憶體中的形式為0011 1111 1000 0000 0000 0000 0000 0000所以輸出的是 0x3f8000000 在記憶體中的的儲存形式0000 0000 0000 0000 0000 0000 0000 0000(int&)a 把a強制轉換成整形參考型別(int)&a 把a的地址強制轉換成整型

(int&)a 相當於
    *(int*)&a

    *(int*)(&a)

    *((int*)&a)

把float類型當成int類型來解釋
3.下面函數的輸出結果是?
#include<iostream>using namespace std;int main(){unsigned int a = 0xFFFFFFF7;unsigned char i = (unsigned char)a;char* b = (char*)&a;printf("%08x,%08x", i, *b);getchar();}
答案:

char *b=(char *)&a
在X86系列的機器中,資料的儲存是“小端儲存”,小端儲存的意思就是,對於一個跨多個位元組的資料,其低位存放在低地址單元,其高位放在高地址單元。比如一個 int 型的資料ox12345678,假如存放在0x00000000,0x00000001,0x00000002,0x00000003這四個記憶體單元中,那麼ox00000000中放的是低位的ox78,而ox00000003中放的是高位的0x12,以此類推。
有了以上的認識,我們可以繼續分析上面的程式為什麼輸出fffffff7:
char* b = (char*)&a;這句話到底幹了什麼事呢?其實說來也簡單,&a可以認為是個指向 unsigned int類型資料的指標對吧,(char *)&a則把&a強制轉換成 char *類型的指標,並且這個時候發生了截斷!截斷後,指標b只指向oxf7這個資料,又由於指標b是 char *型的,屬於有符號數,所以有符號數0xf7在printf()的作用下輸出fffffff7( 這個過程中其實發生了參數型別提升default argumentpromotions)。%x 表示16進位整數類型輸出。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

c++程式員經典面試題(2)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.