初始化结构和指针

时间:2013-11-19 20:09:13

标签: c struct

所以我知道如何声明这样描述的结构:

struct type_t {
    int ha;
    int ja;
    int ka;
};

然后初始化它:

struct type_t[10];

当我面对这样的结构时怎么样:

struct type_t {
    int ha;
    int ja;
    int ka;
} *type_tlist = NULL;

我会继续在主代码中使用*type_tlist吗?

先谢谢你们!!

2 个答案:

答案 0 :(得分:3)

假设我们有这个结构:

struct type_t {
    int ha;
    int ja;
    int ka; };

这是struct type_t定义

您可以按如下方式声明struct type_t类型的变量:

struct type_t a;

或数组:

struct type_t b[10];

这两个构造声明了一些可以立即使用的变量。您可以声明将struct type_t作为类型的指针:

struct type_t *c;

但是为了从中访问成员,您需要为它们分配一些内存:

struct type_t *c = malloc(sizeof(struct type_t));

请注意,在拥有变量(如a或b [2])时,可以使用点运算符访问其成员:

a.ha = 3;
例如,

。但是当有指针时,您可以使用 - >访问其成员。操作者:

c -> ha = 3;

您可以为指针指定NULL值:

c = NULL;

但在为其分配一些内存之前,您可能无法访问其成员。

我试着给你一些关于使用结构的一瞥,但我建议你阅读一本C书(或至少关于结构和/或指针的章节)。

答案 1 :(得分:0)

应该是:

struct type_t {
        int ha;
        int ja;
        int ka;
};

typedef type_t* type_tlist;

然后你可以像这样初始化一个指向结构的指针。

type_tlist x = malloc(sizeof(type_t));

如果您不想使用typedef,可以这样做。

struct type_t* x = malloc(sizeof(type_t));

现在使用struct

的元素

你可以使用 - >运算符或使用它复杂化。操作员ff。代码做同样的事情。

x -> ha = 1;
(*x).ha = 1; 

请注意这些等价物:

array[0] == *(array + 0) 

所以你不需要使用 - >运算符,如果结构是在数组中。你可以使用没有参考运算符'*'

的点