2015-02-07 35 views
-1
#include <stdio.h> 
void fun(char**); 

int main() 
{ 
    char *argv[] = {"ab", "cd", "ef", "gh"}; 
    fun(argv); 
    return 0; 
} 
void fun(char **p) 
{ 
    char *t; 
    t = (p+= sizeof(int))[-1]; 
    printf("%s\n", t); 
} 

有人可以解釋我指派t =(p + = sizeof(int))[ - 1]; ..給出的ANS是CD ..有人可以解釋這個任務,雙指針和輸出

+0

如果這是從某種類型的教育課程的實際分配和答案表述爲'cd',我真誠的建議是跑了一英里。 – NPE 2015-02-07 21:24:51

+0

p增加int大小,然後通過選擇右邊的索引來解除引用。這在技術上是未定義的行爲,因爲程序不能真正做負數組索引。 – 2015-02-07 21:25:33

+0

當然你可以使用負指數。只要在負指數結果中添加一個有效的指針即可。 – gnasher729 2015-02-07 21:26:26

回答

0

此代碼是爲了迷惑你。解釋它並不會真的有幫助,因爲它會阻止你學習理解寫得不好的代碼。

這段代碼很可能是在8位和16位計算機中編寫的,當時sizeof(int)是2.假設sizeof(int)= 2,並仔細檢查代碼步一步一步。

+0

活計,你可以說我什麼雙指針呢.. @ gnaher – 2015-02-07 21:29:36

+0

@SivaPraveen:同一個指針,但對於指針。 – Deduplicator 2015-02-07 21:30:53

+0

@Siva Praveen:沒有像「雙指針」這樣的獨立概念。 「雙指針」只是一個普通的單指針。恰好碰巧指出對象恰好也是一個指針。 – AnT 2015-02-07 21:37:13

0

它非常糟糕的代碼,答案是「CD」,因爲p爲第一加2,並設置爲P [2],從p [0]。然後減1,並設置爲指向字符串「cd」的p [1]。它是一個雙指針,因爲字符串「cd」本身會生成一個指針。

答案取決於你的系統上,在大多數系統上它會指向P [3]。

我同意這個代碼被寫入迷惑你。

0

**p initally包含argv[0]元件即"ab"。它的地址然後由2(給定爲2個字節整型尺寸)。現在它指向"ef"。它然後通過-1遞減。所以最後指向"cd"遞增因此它將t的值打印爲"cd"

你可以找到我的答案here

相關問題