直接上代码,配合注释理解(只是单纯理解各种定义的方式,避免学的云里雾里)
//结构体
/*第一类结构体形式*/
struct str{ //结构体名字为str
ElementType data;
struct str *Next;
}str1; //结构体变量str1,也可以是str2、str3,就是取名字,类似于int a,b,c;
//或是
struct str2{ //无结构体变量,需要在主函数定义结构体变量
ElementType Data;
struct str *Next;
};
/*第二类结构体*/
typedef struct str3{ //把结构体重定义为STR,类似于将代码中的str替换为STR
ElementType Data; //此处重定义之后,STR可同时定义多个变量,STR *a,b;等价于 STR *a; STR *b;
STR Next; //struct str *Next;
}STR3; //但是struct str *a,b;则是定义了一个指针a和一个结构体变量b;
//第二类结构体也可以变形
typedef struct{
ElementType Data;
STR Next;
}STR4;
//或是
typedef struct str STR; //这种定义方式需要前面或后面补充结构体str的定义,是前两种定义的合体
//接着上面的,下面为定义各种指针
void main(){
//对应的结构体指针的定义
struct str *p1; //第一类结构体
struct str2 *p2; //第一类结构体
struct str3 *p3; //第二类结构体
STR3 *p4; //和上一条一样对应typedef struct str3 STR3;定义方式不同但意思一样
STR4 *p5; //对应typedef struct STR4;
//定义好的指针有两种方式使用
p1 = (struct str *)malloc(sizeof(struct str)); //为结构体指针分配对应结构体类型的大小的空间
//或是
p1 = &str1; //结构体指针指向对应结构体变量的首地址
//但殊途同归...
printf("p1->Data = %d",p1->Data);
}