我正在尝试创建一个struct元素数组,如下所示:
#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来创建和使用struct的单个实例?
答案 0 :(得分:2)
第一种类型无效,因为您在struct
之前忘记了termstr
关键字。您的数据类型为struct termstr
,但不仅仅是termstr
。当您typedef
时,结果名称将用作struct termstr
的别名。
即使你不需要这样做。使用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;
}
答案 1 :(得分:1)
应该是:
struct termstr * lptr = malloc(sizeof(struct termstr)*5);
甚至更好:
struct termstr * lptr = malloc(sizeof(*lptr)*5);
答案 2 :(得分:1)
在C中,数据类型的名称是“struct termstr”,而不仅仅是“termstr”。
答案 3 :(得分:1)
您可以这样做:
typedef struct termstr{
double coeff;
double exp;
} termstrStruct;
然后您只能使用termstrStruct
作为结构名称:
termstrStruct* lptr = malloc(sizeof(termstrStruct)*5);
并非总是需要,您只需撰写struct termstr
。
不要忘记free
已分配的内存!
答案 4 :(得分:1)
Typedef是缩短此内容的便捷方法:
struct termstr* lptr = (struct termstr*)malloc(sizeof(struct termstr)*5);
到此:
typedef struct termstr* term;
term* lptr = (term*)malloc(sizeof(term)*5);
施放malloc也是一个好主意!
答案 5 :(得分:0)
如果你想在它自己的名字上使用typename,你可以使用typedef: typedef struct { 双倍; 双b; } termstr;
答案 6 :(得分:0)
在C中你也需要添加struct关键字,所以要么使用typedef将别名链接到'struct termstr',要么你需要编写类似
的内容struct termstr* lptr = malloc(sizeof(struct termstr)*5);
在C ++中你可以直接引用它作为'termstr'(读:不再需要struct关键字)。