2017-06-05 131 views
0

即時學習c編程。 我想定義一個全局結構數組。所以我會有一個指向該數組的指針,該數組的每個成員都是複數的結構。 我的目標是能夠通過指針(* vars)訪問這個數組,並且能夠在主函數中更改/讀取其成員。定義全局指針結構數組

我面臨這個問題的麻煩,我不知道如何以及在哪裏定義每件事情。 我想這下代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 

typedef struct complext 
{ 
    double real; 
    double img; 
} complex; 
complex* vars; 

int main() 
{ 
    int i; 
    vars = malloc(6 * sizeof(vars)); 
    for (i = 0; i < 6;) 
     vars[i]->real = 0; 
} 

即時得到當我嘗試存取權限瓦爾[I]錯誤。會員‘真正的’IM東西 」的請求不是一個結構或聯合。 謝謝!

+0

您應該對'malloc'的返回值進行類型轉換。因此:'vars =(var *)malloc(6 * sizeof(* vars));'。另外,你應該把最後一行改爲'vars [i] .real = 0;'。 –

+0

不,在沒有必要時不要施放。 對不起,我的評論是在回答溼婆的。 – ncarrier

+0

試過,但仍然得到相同的錯誤。 – Yakalolo

回答

0

瓦爾是struct complext *類型,但瓦爾[i]是struct complext類型的,所以你只需要使用vars[i].real代替vars[i]->real

2

有3條蟲子在你的代碼
應該vars[i].real。請尊敬您已經定義vars是一個全球性的指針complex結構數據類型。將它定義爲一個陣列中使用:complex vars[6]; - - >看看@的何塞·馮特ANS
2. malloc回報void *它轉換爲(complex*) - >我瞭解到這應該是好(看帖由@Stargateur評論)
3.在年底for環沒有inc語句i,因此它永遠運行
4.由於vars是一個類型複雜的指針,malloc只分配6個指針值的內存(這是6 * sizeof(int))。 sizeof(vars)sizeof(complex) - > @xing指出了這一點

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<ctype.h> 

typedef struct complext { 
double real; 
double img; 
}complex; 
complex *vars; 

int main() 
{ 
int i; 
vars= (complex*)malloc(6*sizeof(complex)); 
for(i=0;i<6; i++) 
vars[i].real=0; 
} 
+1

我同意1和3,而不是2 正如Shiva發現的那樣,應該使用'sizeof(* vars)'而不是'sizeof(vars)' – ncarrier

+2

2. [我投出malloc的結果嗎?] (https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – Stargateur

+0

@Stargateur:感謝指出它! – Zakir

1

與數組您的調音指針。做爲一個數組(作爲@ Zakir已經完成的指針):

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<ctype.h> 

typedef struct complext { 
    double real; 
    double img; 
}complex; 
complex vars[6]; 

int main() 
{ 
    int i; 

    for(i=0;i<6;i++) 
    vars[i].real=0; 
}