2010-11-30 23 views
1

要使用pthreads,我將用作輸入的char *作爲輸入轉換爲void *作爲輸入。如果它後來轉換爲(char *),它可以正常打印和使用((char *)var)。但是,如果有人(char *)var [i],其中'我'將幫助我們引用一個字符,它不會。爲什麼?爲什麼我不能引用先前投射的字符串中的字符無效?

例如MS表示'表達式必須是一個指向完整對象類型的指針'。

回答

6

由於運算符的優先級:投射出現在下標運算符之後。

您必須編寫((char*)var)[i];

1

嘗試(char *) &var[i],但只是從var[i]獲得參考。你不能這樣做(char *) var[i],因爲它實際上試圖轉換char to (char *)

+0

我喜歡在第二句你的思維。它解釋清楚。這也解釋了爲什麼Simone的答案有效。 – 2010-11-30 09:06:50

2

在這種情況下,強制轉換的優先級低於數組索引。相反,你將不得不做一些像*((char *)var + i),但最明顯的方法可能是將其分配到一個臨時的:

char *str = var; 
printf("%c", str[i]); 
相關問題