中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. "); //-->

        博客專欄

        EEPW首頁 > 博客 > 深入剖析一道有意思的面試題

        深入剖析一道有意思的面試題

        發(fā)布人:魚鷹談單片機(jī) 時(shí)間:2021-06-03 來源:工程師 發(fā)布文章

        魚鷹在技術(shù)交流群看到這樣一道面試題:

        1.png

        請(qǐng)問這道題的result值是什么(32 位機(jī)器)?

        變換一下,結(jié)果又是什么?

        2.png

        在看魚鷹剖析之前,建議認(rèn)真思考之后再看下面的答案。

        1、答案是4

        2、答案不確定,結(jié)果可能是隨機(jī)的(為什么用可能)。

        3.png

        首先分析上面這道題,從里到外一步步分析:

        &arr

        取數(shù)組的首地址,并且得到的對(duì)象還是數(shù)組,可理解為對(duì)象 int(*p)[5];

        &arr + 1

        因?yàn)槟壳暗牟僮鲗?duì)象還是數(shù)組形式,所以 + 1 時(shí),實(shí)際上操作單位大小是數(shù)組,也就是 4* 5,也就是說此時(shí)地址指向了數(shù)組的末尾。

        4.png

        因?yàn)橹簧暾?qǐng)了 5 個(gè) int空間,所以這個(gè)空間之外的值是不知道的,但幸好這里又使用了強(qiáng)制轉(zhuǎn)化,將數(shù)組對(duì)象轉(zhuǎn)化了成了 int* 指針。

        這樣一來,操作對(duì)象就不再是數(shù)組,而是 int*指針。

        這樣我們就可以按照 int的大小移動(dòng)指針,這里是 2 ,所以按照 int大小移動(dòng),就在 4 的位置。

        5.png

        最后取這個(gè)地址的值,這就是為什么這道題的答案是 4。

        其實(shí)如果要增加難度,可以這樣:

        6.png

        強(qiáng)制轉(zhuǎn)化為 char *, 并且修改移動(dòng)大小 8,此時(shí)答案還是 4。

        7.png

        如果不修改移動(dòng)大小,還是 2 ,那么值就是 0 。但是對(duì)于數(shù)組的初始值大于兩個(gè)字節(jié)的情況(目前的初始值很?。?,此時(shí)你必須提供機(jī)器的大小端情況,否則你將受到面試者的鄙視(出題不嚴(yán)謹(jǐn))。

        所以這道題不是閑著慌,很考驗(yàn)面試者對(duì)指針的理解。并且綜合考察了以下幾個(gè)方面:

        1、各種優(yōu)先級(jí)

        2、強(qiáng)制轉(zhuǎn)化

        3、地址的操作對(duì)象問題。

        4、數(shù)組的分布問題。

        對(duì)象這個(gè)詞可能更多體現(xiàn)在面向?qū)ο笳Z言的書籍中,事實(shí)上,C 語言中也處處蘊(yùn)含該思想,只是它更多的是內(nèi)存對(duì)象,比如下面這種:

        8.png

        雖然都是自加操作,但因?yàn)閮?nèi)存對(duì)象不同,自加的值也不同。同理,自減也一樣。

        言歸正傳,下面這個(gè)又該如何分析呢?

        9.png

        實(shí)際上,理解了上面的分析過程,這道題也能分析,只不過麻煩的是這道題的指向不在數(shù)組內(nèi),而在數(shù)組之外(arr- 20),導(dǎo)致取得值并不確定。

        10.png

        其實(shí)魚鷹在測(cè)試該問題時(shí),發(fā)現(xiàn)優(yōu)化級(jí)別3和 優(yōu)化級(jí)別0 的結(jié)果是完全不同的,可能編譯器在優(yōu)化時(shí)發(fā)現(xiàn)了代碼的傻逼,直接給了一個(gè)比較固定的值,即數(shù)組的末尾地址(注意結(jié)果就是給了一個(gè)地址,而不是取它的值,感興趣的可以自己使用 MDK 測(cè)試一下)。

        不管你是修改上面的 1 還是 2,都是固定不變的。

        但優(yōu)化級(jí)別0就是你理解的結(jié)果。

        從中也可以明白級(jí)別優(yōu)化的影響了,所以如果結(jié)果和自己想不一樣,不如先把優(yōu)化級(jí)別設(shè)置為最低再測(cè)試。

        *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



        關(guān)鍵詞: 算法

        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉