1、自定义类型
2、结构体
结构体中成员类型可以相同
也可以不同
在C语言中,数组是表示类型相同
的数据,而结构体则是若干类型不同或相同
数据项的集合
2.1、结构体类型说明
2.2、结构体变量的定义
-
声说明结构体类型
,在定义结构体变量
struct student{
int num;
char name[8];
};
struct student a,*b,c[3];
-
声明结构体类型的同时
定义结构体变量
struct student{
int num;
char name[8];
}a,*b,c[3];
-
直接定义
结构体变量
struct {
int num;
char name[8];
}a,b,c[3];
-
使用用户自定义
类型定义结构体变量
typedef struct student{
int num;
char name[8];
}STD;
STD a,*b,c[3]
2.3、结构体的初始化
-
结构体变量
的初始化
struct data{
int a;
float b;
}s={12,24.56};
-
结构体数组
的初始化
struct {
int x;
int y;
}c[3]={12,24,16,48,60,72};
2.4、结构体变量所占空间大小
2.5、结构体成员的引用
-
形式1:结构体变量名.成员名
-
形式2:(*结构体指针名).成员名
-
形式3:结构指针名->成员名
-
.
成员运算符
-
->
指向运算符
#include <stdio.h>
struct abc{
int a,b,c;
};
int maint(){
struct abc s[2]={{1,2,3},{4,5,6}};
int t;
t=s[0].b+s[1].a;
printf("%d\n",t);
return 0;
}
输出结果:6
3、链表
3.1、处理动态链表所需的函数
-
malloc()
函数:分配存储单元
int *p;
p=(int*)malloc(sizeof(int)); //分配整型存储单元,返回整型指针赋给指针p
-
calloc()
函数:分配指定的存储单元
char *p;
p=(char*)calloc(10,sizeof(char)); //分配10个字符型的存储单元,返回首地址赋给指针p
-
free()
函数:释放存储单元
free(p); //释放指针p所指的存储单元
3.2、指向自身的结构体类型
3.3、静态链表
struct node{
int data;
struct node *next;
};
int main(){
struct node a,b,c,*p; //定义
a.data=1;b.data=2;c.data=3; //赋值
a.next=&b;b.next=&c;c.next=NULL; //连接
p=&a;
while(p){
printf("%d\n",p->data);
p=p->next;
}
return 0;
}
3.4、链表的插入与删除