2012-02-11 59 views
0

我解決過去幾年GATE試卷這裏我堅持這個問題麻煩在C數組指針

什麼C-程序打印下列片段?

char c[]="GATE2011"; 
char *p =c; 
printf ("%s", p+p[3]-p[1]); 

答案是「2011」

我知道,在C,數組變量是指向數組的第一個地址。我的邏輯答案是'E2011',但輸出是

有人可以解釋指針數學涉及到這個嗎?

+0

我認爲你需要在指針上重新閱讀你的書。你正在混合指針算術和字符。如果沿着這條路線走下去,這將導致未來的各種問題。 – 2012-02-11 04:30:02

+0

@EdHeal這是一個考試(蓋茨)的問題。希望不是一些生產代碼! – 2012-02-11 04:33:27

回答

3

P [3] = A

P [1] = E

ë - A = 4

因此p + 4 =地址2

因此它打印2011

+0

謝謝。我花時間在複雜的解決方案,忘記了基本知識。我現在要記住這個解決方案。 – 2012-02-11 04:41:26

+0

沒問題。祝你門考試及相關活動順利 – 2012-02-11 04:56:48

7

這個問題有很多更多的是與ASCII values比它與指針。

p[3] == 'E' == 69 (decimal) 
p[1] == 'A' == 65 
p[3]-p[1] = 4 

p+4 = A string starting at the 4th character. 

p[] = [0] [1] [2] [3] [4] [5] [6] [7] [8] 
     G A T E 2 0 1 1 \0 

因此,P [4] =

+3

這是一個*小*關於指針。 :) – Duck 2012-02-11 04:26:56

+2

嗯,這是關於*混合*指針和ASCII值:) – 2012-02-11 04:27:03

+0

謝謝..我昨天晚上操縱地址,我完全忘了ASCII值。 – 2012-02-11 04:38:29