2014-12-04 75 views
1

我該如何類型轉換一個void指針結構數組?這裏是我的代碼:類型轉換void指針結構類型

typedef struct{ 
    int a; 
    double b; 
} myStruct; 

void Func1(void * Array1); 

int main(){ 
    myStruct S1[5]; 

    S1[0].a = 1; 
    S1[0].b = 2.3; 

    S1[1].a = 2; 
    S1[1].b = 3.4; 

    Func1(S1); 

    return 0; 
} 

void Func1(void * Array1){ 
    myStruct S2[5]; 

    S2[0] = (myStruct *)Array1[0]; 
} 

我得到的編譯錯誤Func1分配S2[0]。我如何正確地輸入Array1

+2

主要問題,爲什麼你在第一時間宣佈FUNC1爲void *?你會得到什麼錯誤?試圖((myStruct *)Array1)[0]? – eckes 2014-12-04 00:13:57

+0

指針不是數組,也沒有一個是元素類型。而是使用 – Deduplicator 2014-12-04 00:15:35

回答

5

[]運算符的優先級高於運算符(cast)。因此,你必須使用額外的括號:

S2[0] = ((myStruct *)Array1)[0]; 

或使用指針:

myStruct* a = Array1 ; 
S2[0] = a[0]; 
+0

或取消引用操作符。 – Deduplicator 2014-12-04 00:16:05