[問題] 問一題面試的題目...

看板C_and_CPP作者 (如果)時間16年前 (2010/02/04 14:05), 編輯推噓12(12034)
留言46則, 16人參與, 最新討論串1/4 (看更多)
void main(void) { int*a,*b; a=1; b=1; printf("%d\n",a+b); } 這是一題有關指標的題目 請問哪裡有錯?? 面試官問我這題...讓我當場掛黑板...看來我C要重修了.. 我一直看前面三行...他跟我說問題出在最後一行... 可是我到現在還找不到答案...希望有人幫我解答...謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.142.176.63

02/04 14:10, , 1F
第一行 void 當回傳值不好
02/04 14:10, 1F

02/04 14:10, , 2F
看起來是兩個 int * 不能相加?
02/04 14:10, 2F

02/04 14:10, , 3F
gcc: invalid operands to binary +
02/04 14:10, 3F

02/04 14:10, , 4F
(have 「int *」 and 「int *」)
02/04 14:10, 4F

02/04 14:11, , 5F
printf("%d\n",(int)(a+b));?
02/04 14:11, 5F

02/04 14:12, , 6F
基本上a=1就不對了ㄚ...
02/04 14:12, 6F

02/04 14:12, , 7F
我猜C(gnu c)的答案是5...等我看看
02/04 14:12, 7F

02/04 14:13, , 8F
a=1與b=1沒有錯, 就跟=NULL =0是一樣的, 它只是init個值
02/04 14:13, 8F

02/04 14:13, , 9F
a = 1; b = 1; 其實是合法的 XD
02/04 14:13, 9F

02/04 14:13, , 10F
printf("%d\n", (int)a + (int)b); <-- 大概要改這樣
02/04 14:13, 10F

02/04 14:14, , 11F
要算出5的話應該是 printf("%d\n", a + (int)b);
02/04 14:14, 11F

02/04 14:14, , 12F
會有問題的是對錯誤位址做讀寫動作....
02/04 14:14, 12F

02/04 14:15, , 13F
考慮可行的改正方式來說, 可以有幾的方向, 大多都是對
02/04 14:15, 13F

02/04 14:15, , 14F
可是會有cannot convert from 'const int' to 'int *的結果..
02/04 14:15, 14F

02/04 14:15, , 15F
int與int*的型態轉換; 而錯誤點主要在於, pointer可以直
02/04 14:15, 15F

02/04 14:16, , 16F
樓上用的編譯器是? 我用gcc會有警告但可以通過編譯
02/04 14:16, 16F

02/04 14:16, , 17F
接加一個整數做offset, 但是直接加另一個指標是????
02/04 14:16, 17F

02/04 14:16, , 18F
VC++
02/04 14:16, 18F

02/04 14:16, , 19F
再來就是對錯誤的位址做取值可能會有run-time error.
02/04 14:16, 19F

02/04 14:18, , 20F
不過這個程式沒有用 *a *b 的話就不會爆炸
02/04 14:18, 20F

02/04 14:19, , 21F
剛用VC2005試了, C++會報error, C只會發warning....
02/04 14:19, 21F

02/04 14:20, , 22F
VC++真的會在a=1;b=1;那邊error 真怪...
02/04 14:20, 22F

02/04 14:20, , 23F
果然.james說的對, pointer之間不能相加,要a + (int)b
02/04 14:20, 23F

02/04 14:20, , 24F
忘了C++的型別檢查比較嚴格; So, =NULL 算是特例吧XD
02/04 14:20, 24F

02/04 14:20, , 25F
我比較想知道 為啥答案是5......有誰可以告訴我一下= =
02/04 14:20, 25F

02/04 14:21, , 26F
5 = 1 + sizeof(int)
02/04 14:21, 26F

02/04 14:21, , 27F
對不起我錯了 (int)(a+b)不行
02/04 14:21, 27F

02/04 14:23, , 28F
懂了...
02/04 14:23, 28F

02/04 14:24, , 29F
我也懂了....謝謝各位....
02/04 14:24, 29F

02/04 14:28, , 30F
看板長知識 謝謝各位
02/04 14:28, 30F

02/04 14:46, , 31F
不一定會是 5 .. 在 16 bit 系統底下會是 3
02/04 14:46, 31F

02/04 15:02, , 32F
現在都考慮64bit吧
02/04 15:02, 32F

02/04 15:04, , 33F
這在64 bit(gcc 3.4)上也是5,除非是long *a, *b;
02/04 15:04, 33F

02/04 15:39, , 34F
XD 指標不能相加 不過assignment那邊也怪怪的 一般不會這樣寫
02/04 15:39, 34F

02/04 18:19, , 35F
哪裡錯了??我覺得從頭錯到尾耶@@
02/04 18:19, 35F

02/04 19:03, , 36F
這什麼題目 = = 面試官要重修 C 才是真的...
02/04 19:03, 36F

02/04 19:03, , 37F
哪一間啊?我要跟學弟們說不要去這家...
02/04 19:03, 37F

02/04 21:02, , 38F
樓上才有問題...這就是考官要考你的概念阿
02/04 21:02, 38F

02/04 21:48, , 39F
真的喔..
02/04 21:48, 39F

02/05 00:44, , 40F
我也覺得這個問題問的不夠明確- -
02/05 00:44, 40F

02/05 09:05, , 41F
我也覺得考官要重修 C ..... XD
02/05 09:05, 41F

02/05 13:39, , 42F
如果是寫單晶片 那a=1, b=1也許合理 但一般os 都會掛吧XD
02/05 13:39, 42F

02/05 13:39, , 43F
當然 要說compiler可以pass就沒有錯 那也可以XD..
02/05 13:39, 43F

02/05 13:40, , 44F
那這世界上一堆bug都不是bug了XD
02/05 13:40, 44F

02/05 13:59, , 45F
反正考官是問code的問題, 就看受試者說不說的出一套來:D
02/05 13:59, 45F

08/08 10:18, , 46F
指標不能相加...
08/08 10:18, 46F
文章代碼(AID): #1BQcEW3W (C_and_CPP)
文章代碼(AID): #1BQcEW3W (C_and_CPP)