我正在学习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;
}
我在尝试访问vars [i]时遇到错误。 “要求成员'真实'我不是结构或工会。 谢谢!
答案 0 :(得分:2)
您的代码中有3个错误
1. vars[i]->real
应为vars[i].real
。请尊重数据类型您已将vars
定义为complex
结构的全局指针。要将其定义为数组,请使用:complex vars[6];
- &gt;看看@JoséFonte的回复
2. malloc
返回void *
将其转换为(complex*)
- &gt;我知道这应该没问题(看看@Stargateur发布的评论)
3.最后的for
循环没有i
的inc语句,因此它会永远运行
4. malloc
仅分配6个指针的内存(即6 * sizeof(int)),因为vars
是复杂类型的指针。 sizeof(vars)
应为sizeof(complex)
- &gt; @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)
您的混合指针与数组。将它作为一个数组(作为@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;
}
答案 2 :(得分:0)
vars的类型为struct complext *
,但vars [i]的类型为struct complext
,因此您只需使用vars[i].real
代替vars[i]->real
。