定义全局struct指针数组

时间:2017-06-05 16:29:11

标签: c ubuntu-12.04

我正在学习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]时遇到错误。 “要求成员'真实'我不是结构或工会。 谢谢!

3 个答案:

答案 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