结构体
1、自定义类型
-
自定义类型就是给数据类型取别名
-
自定义类型不会产生新类型
typedef int INTEGER; INTEGER i,j; typedef int* INTEGER; INTEGER p; INTEGER *q
2、结构体
结构体中成员类型可以
相同
也可以不同
在C语言中,数组是表示类型相同
的数据,而结构体则是若干类型不同或相同
数据项的集合
2.1、结构体类型说明
-
声明结构体类型的一般形式为:
struct 结构体名{ 成员列表 };
-
例:
struct student{ int num; char name[8]; float score; };
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、结构体变量所占空间大小
-
结构体变量
所占空间大小等于所有成员之和
struct std{ int a[2]; //此处是VC6.0环境下(int占四个字节) char ch[10]; float s; double f; } std1,*p=&std1; 结构体变量std1所占的内存空间字节数为:30 结构体指针变量p所占的内存空间字节数为: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、指向自身的结构体类型
-
数据域(data)——指针域(next)
struct node{ int data; struct node *next; };
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、链表的插入与删除
-
插入(后插法):将q节点插入到p节点之后
q->next=p->next; p->next=q;
-
删除:将q节点从链表中删除
p->next=q->next; free(q);