[分享] CPU公司指標操作面試題

看板C_and_CPP作者時間13年前 (2012/03/01 21:14), 編輯推噓5(5011)
留言16則, 8人參與, 最新討論串1/1
美國某CPU生產公司面試題 寫出以下程式的執行結果 #include <stdio.h> int main() { int a[] = { 1, 2, 3, 4, 5 }; int *ptr = (int *)(&a + 1); printf("%d %d", *(a + 1), *(ptr - 1)); return 0; } 解答在次頁 2 5 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.179.157

03/01 22:16, , 1F
有趣的是+1在pointer上是指+1 unit..在這可以看出從a
03/01 22:16, 1F

03/01 22:16, , 2F
decay成pointer 和pointer to a的差別
03/01 22:16, 2F

03/01 22:54, , 3F
為什麼 &a+1 會跳 20 個 bytes?
03/01 22:54, 3F

03/01 22:55, , 4F
請問 &a 與 &a[0] 是一樣的意思嗎?@@
03/01 22:55, 4F

03/01 22:58, , 5F
好像知道了 &a+1 會跳 sizeof(int)x5 個 bytes
03/01 22:58, 5F

03/01 22:59, , 6F
問一下 a+1和&a+1 一個跳sizeof (a) 一個跳sizeof (int)
03/01 22:59, 6F

03/01 22:59, , 7F
是為什麼呢? 滿詭異的
03/01 22:59, 7F

03/01 23:00, , 8F
我講的相反了 &a+1 會跳sizeof (a), a+1 會跳 sizeof (int)
03/01 23:00, 8F

03/01 23:03, , 9F
指向陣列跟指向元素的差別,遊戲規則一直如此,從未變過
03/01 23:03, 9F

03/01 23:12, , 10F
懂了 但想藉此問下 a = &a 數值是一樣 但為啥會一樣呢?
03/01 23:12, 10F

03/01 23:13, , 11F
我是把他當定義 在死背 該怎解釋呢
03/01 23:13, 11F

03/01 23:21, , 12F
#1ERylPtG (C_and_CPP) 我寫過一篇文章,叫混沌四神
03/01 23:21, 12F

03/01 23:31, , 13F
我把他轉成ASM code才算出來是2 5,C code我還真看不懂
03/01 23:31, 13F

03/01 23:45, , 14F
仔細算是2,5... 我答對了, 但我仍然認為太狗血了,沒意義
03/01 23:45, 14F

03/02 00:18, , 15F
QQ29: 因為 C 有定義非常非常多自動轉型...
03/02 00:18, 15F

03/02 00:19, , 16F
最好都先把他們都當作不一樣的東西 :P
03/02 00:19, 16F
文章代碼(AID): #1FJtOzC_ (C_and_CPP)