一道阿里面試題 關於print自加的操作結果解釋

2021-09-22 01:37:35 字數 492 閱讀 7144

int

main()

輸出結果

335

3

兩個要點:

printf的操作是從右到左計算表示式的值,將返回值(位址)存入相應的快取區。表示式計算完畢後,將所有快取區按計算順序入棧,依次彈棧輸出。

對於返回值,前置++i返回的是i變數本身的位址,而後置i++返回的是臨時快取區的位址(我們知道i++是先返回i再+1)

問題本身:

printf("%d, %d\n", ++i, ++i);

兩個++i依次計算後,由於printf快取區里存的就是i本身的位址,因此輸出的就是i的最終值3。

printf("%d, %d\n", ++i, i++);

先計算i++:開闢臨時位址,存入加之前的值3,將該位址存入快取區;

再計算++i:將i的位址存入快取區,此時i是5。

參考此部落格參考牛客網牛友的回答

一道面試題

一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...

一道面試題

前些時候在找工作,就在準備結束此次找工作歷程的時候,去了一家公司面試,去了之後技術經理直接帶到一台電腦旁,給了一張紙條,上面是這樣的題目 用c或c 來實現 1 建立一棵樹,該樹的深度是隨機的,每個節點的位元組點數是隨機的。2 給每個節點分配一段隨機大小的記憶體空間,給每個節點賦乙個隨機數。3 遍歷這...

一道面試題

如果n為偶數,則將它除以2,如果n為奇數,則將它加1或者減1。問對於乙個給定的n,怎樣才能用最少的步驟將它變到1。例如 n 61 n 60 n 2 30 n 2 15 n 16 n 2 8 n 2 4 n 2 2 n 2 1 public class myclass public static vo...