《程式設計師面試寶典》中的乙個錯誤

2021-05-27 18:09:46 字數 773 閱讀 8725

發現寶典中乙個錯誤,題目如下:

判斷下面函式的輸出

1 void main()

2

解答: 輸出的結果是000000f7, fffffff7。變數i的輸出是沒有疑問的,unsigned int到unsigned char直接截斷,取低位元組。對於變數b,在第5行中,書中解釋是這一行等價於:

unsigned int* p = &a; // p中的內容是的位址,即p指向a

char* b = (char*)p; // 此處的強制轉換只是使b也指向a而已

// 這裡是char型別的指標轉換,而不是char型別的轉換,影響的只是指標的定址

書中認為,b是指向的內容就是a,所以解釋了*b的輸出就是a的內容。

但是,我做了如下驗證:

1 void main()

2

輸出的結果是:aaaaaaa7, 000000a7, ffffffa7,000000a7。按照書中的理論,這裡*b和*c明顯是無法解釋的。經過查閱相關的資料,我認為可以這樣解釋,其實程式的5行和6行也是進行截斷。b或者c是指向a的記憶體,但是只是指向a的低位元組記憶體。也就是0xa7。b是char*型別,所以把0xa7解釋為負數,所以*b輸出結果為0xffffffa7,等於-89。而c,為unsigned char*型別,*c的輸出為167。

參考這裡:可以知道,在x86機器上,都是小端位元組序(litte-endian)。還有這裡關於c語言的記憶體的問題。

程式設計師面試寶典一

1 int i i 首先宣告乙個變數i,然後將變數i的值 未初始化 賦值給自己 2 下面 的意義 void func int x,int count 求乙個整數轉換為二進位制之後包含多少個1 3 printf在vc6.0下是自右向左運算的 好像跟編譯器有關 int arr int ptr arr p...

程式設計師面試寶典

據統計,80 的簡歷都是不合格的。不少人事管理者抱怨收到的許多簡歷在格式上很糟糕。簡歷應該如何做到在格式上簡潔明瞭,重點突出?求職信應該如何有足夠的內容推銷自己?如何控制長度,言簡意賅?相信讀了本章你會對簡歷的撰寫有乙個新的認識。2.1 簡歷注意事項 1 簡歷不要太長 一般的簡歷普遍都太長。其實簡歷...

程式設計師面試寶典 實現乙個集合棧

解析 剛開始沒有反應過來題目是什麼意思,仔細讀了讀才梳理出來 輸入的引數中ope是乙個二維vector陣列,其中第二維度 也就是列 被限制為只有兩個元素。例如ope 2 0 和ope 2 1 當ope 2 0 1時,表示要入棧,ope 2 1 的值就是要插入的值。當ope2 0 2時,表示要出棧,此...