我遇到了有关指针和结构的问题。
#include<stdlib.h>
#include<stdio.h>
定义两个结构,子术语和主术语。
typedef struct{
int sub_id;
int sub_data;
struct sub_term *next_term;
}sub_term;
typedef struct{
char name[10];
struct sub_term *init_term;
struct sub_term *current_term;
}major_term;
我想创建一个包含子术语的主要术语。
int main(void){
major_term *Test_1;
Test_1 = (major_term *)malloc(sizeof(major_term));
Test_1->init_term = (sub_term *)malloc(sizeof(sub_term));
Test_1->current_term = Test_1->init_term;
printf("Sub term 1 id : ");
但是,编译器注意到我在这一行中出现了[[Error]引用指向不完整类型的指针”。
scanf("%d",&Test_1->current_term->sub_id);
我是C语言的新手,不确定原因。 谢谢您的建议,可以使我的代码更好!
printf("Sub term 1 id : ",Test_1->current_term->sub_id);
printf("Sub term 1 data: ");
scanf("%d",&Test_1->current_term->sub_data);
printf("Sub term 1 data : ",Test_1->current_term->sub_data);
return 0;
}
答案 0 :(得分:4)
您需要结构的名称,而不仅仅是typedefs:
typedef struct sub_term{
// ^^^^^^^^
int sub_id;
int sub_data;
struct sub_term *next_term;
}sub_term;
typedef struct major_term{
// ^^^^^^^^^^
char name[10];
struct sub_term *init_term;
struct sub_term *current_term;
}major_term;
使用typedef
定义类型名称
typedef struct {} MyType;
未使用名称MyType
定义结构。而是将名称MyType
定义为未命名结构的别名。
结构名称和通用类型名称位于C中的两个单独的命名空间中,因此struct MyType
与MyType
不同,并且它们不会相互干扰。
当您声明一个结构而不定义它(即提供结构的内容)时,该结构是不完整的类型。在您的代码中,您定义了指向struct sub_term
的指针,但未定义该结构(再次注意:typedef
-ing不会为结构指定名称-它为您未命名的结构定义别名),因此编译器抱怨“类型不完整”。