要使用pthreads,我將用作輸入的char *作爲輸入轉換爲void *作爲輸入。如果它後來轉換爲(char *),它可以正常打印和使用((char *)var)。但是,如果有人(char *)var [i],其中'我'將幫助我們引用一個字符,它不會。爲什麼?爲什麼我不能引用先前投射的字符串中的字符無效?
例如MS表示'表達式必須是一個指向完整對象類型的指針'。
要使用pthreads,我將用作輸入的char *作爲輸入轉換爲void *作爲輸入。如果它後來轉換爲(char *),它可以正常打印和使用((char *)var)。但是,如果有人(char *)var [i],其中'我'將幫助我們引用一個字符,它不會。爲什麼?爲什麼我不能引用先前投射的字符串中的字符無效?
例如MS表示'表達式必須是一個指向完整對象類型的指針'。
由於運算符的優先級:投射出現在下標運算符之後。
您必須編寫((char*)var)[i];
。
嘗試(char *) &var[i]
,但只是從var[i]
獲得參考。你不能這樣做(char *) var[i]
,因爲它實際上試圖轉換char to (char *)
。
在這種情況下,強制轉換的優先級低於數組索引。相反,你將不得不做一些像*((char *)var + i)
,但最明顯的方法可能是將其分配到一個臨時的:
char *str = var;
printf("%c", str[i]);
我喜歡在第二句你的思維。它解釋清楚。這也解釋了爲什麼Simone的答案有效。 – 2010-11-30 09:06:50