0

我正在尝试创建一个结构元素数组,如下所示:

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

struct termstr{
double coeff;
double exp;
};

int main(){

termstr* lptr = malloc(sizeof(termstr)*5);

return 0;
}

当我编译这个时,我得到如下错误:

term.c: In function ‘main’:
term.c:11:1: error: unknown type name ‘termstr’
term.c:11:31: error: ‘termstr’ undeclared (first use in this function)

但是,当我将代码更改为以下内容时,它会照常编译:

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

typedef struct termstr{
double coeff;
double exp;
}term;

int main(){

term* lptr = malloc(sizeof(term)*5);

return 0;
}

我添加了 typedef(类型名称为 term),将 struct 的名称更改为 termstr,并以 term* 作为指针类型分配内存。

在这种情况下是否总是需要 typedef,即创建结构数组?如果不是,为什么第一个代码会出错?是否还需要 typedef 来创建和使用结构的单个实例?

4

7 回答 7

2

第一种类型不起作用,因为您struct之前忘记了关键字termstr。您的数据类型是struct termstr但不只是termstr. 当您使用 时typedef,生成的名称将用作 的别名struct termstr

即使你不需要这样做。使用typedef更好:

顺便说一句,不要忘记释放内存:

阅读为什么要使用 typedef?

您的工作代码应该是:

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

struct termstr{
  double coeff;
  double exp;
};

int main(){

struct termstr* lptr = malloc(sizeof(struct termstr)*5);
free(lptr);
return 0;
}
于 2013-06-15T15:00:20.900 回答
1

Typedef 是一种方便的缩短方法:

struct termstr* lptr = (struct termstr*)malloc(sizeof(struct termstr)*5);

对此:

typedef struct termstr* term;
term* lptr = (term*)malloc(sizeof(term)*5);

铸造 malloc 也是一个好主意!

于 2013-06-15T15:00:26.927 回答
1

它应该是:

struct termstr * lptr = malloc(sizeof(struct termstr)*5);

甚至更好:

struct termstr * lptr = malloc(sizeof(*lptr)*5);
于 2013-06-15T14:56:33.850 回答
1

在 C 中,数据类型的名称是“struct termstr”,而不仅仅是“termstr”。

于 2013-06-15T14:57:44.287 回答
1

你可以这样做:

typedef struct termstr{
   double coeff;
   double exp;
} termstrStruct;

然后您只能termstrStruct用作结构的名称:

termstrStruct* lptr = malloc(sizeof(termstrStruct)*5);

它并不总是必需的,您可以简单地编写struct termstr.

不要忘记free分配的内存!

于 2013-06-15T14:58:07.497 回答
0

如果你想单独使用类型名 termstr,你可以使用 typedef: typedef struct { double a; 双乙;} 术语;

于 2013-06-15T14:59:07.147 回答
0

在 C 中,您还需要添加 struct 关键字,因此您可以使用 typedef 将别名与“struct termstr”链接起来,或者您需要编写类似的东西

struct termstr* lptr = malloc(sizeof(struct termstr)*5);

但是,在 C++ 中,您可以直接将其引用为“termstr”(阅读:此处不再需要 struct 关键字)。

于 2013-06-15T14:59:11.267 回答