2017-06-05 127 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; 
}