我解決過去幾年GATE試卷這裏我堅持這個問題麻煩在C數組指針
什麼C-程序打印下列片段?
char c[]="GATE2011";
char *p =c;
printf ("%s", p+p[3]-p[1]);
答案是「2011」
我知道,在C,數組變量是指向數組的第一個地址。我的邏輯答案是'E2011',但輸出是
有人可以解釋指針數學涉及到這個嗎?
我解決過去幾年GATE試卷這裏我堅持這個問題麻煩在C數組指針
什麼C-程序打印下列片段?
char c[]="GATE2011";
char *p =c;
printf ("%s", p+p[3]-p[1]);
答案是「2011」
我知道,在C,數組變量是指向數組的第一個地址。我的邏輯答案是'E2011',但輸出是
有人可以解釋指針數學涉及到這個嗎?
P [3] = A
P [1] = E
ë - A = 4
因此p + 4 =地址2
因此它打印2011
謝謝。我花時間在複雜的解決方案,忘記了基本知識。我現在要記住這個解決方案。 – 2012-02-11 04:41:26
沒問題。祝你門考試及相關活動順利 – 2012-02-11 04:56:48
這個問題有很多更多的是與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] =
這是一個*小*關於指針。 :) – Duck 2012-02-11 04:26:56
嗯,這是關於*混合*指針和ASCII值:) – 2012-02-11 04:27:03
謝謝..我昨天晚上操縱地址,我完全忘了ASCII值。 – 2012-02-11 04:38:29
我認爲你需要在指針上重新閱讀你的書。你正在混合指針算術和字符。如果沿着這條路線走下去,這將導致未來的各種問題。 – 2012-02-11 04:30:02
@EdHeal這是一個考試(蓋茨)的問題。希望不是一些生產代碼! – 2012-02-11 04:33:27