C——结构体

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、结构体变量的定义

  1. 声说明结构体类型,在定义结构体变量

    struct student{
    	int num;
    	char name[8];
    };
    struct student a,*b,c[3];
    
  2. 声明结构体类型的同时定义结构体变量

    struct student{
    	int num;
    	char name[8];
    	}a,*b,c[3];
    
  3. 直接定义结构体变量

    struct {
    	int num;
    	char name[8];
    }a,b,c[3];
    
  4. 使用用户自定义类型定义结构体变量

    typedef struct student{
    	int num;
    	char name[8];
    }STD;
    STD a,*b,c[3]
    

2.3、结构体的初始化

  1. 结构体变量的初始化

    struct data{
    	int a;
    	float b;
    }s={12,24.56};
    
  2. 结构体数组的初始化

    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);
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴在敲Bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值