我是靠谱客的博主 鲜艳大树,最近开发中收集的这篇文章主要介绍C语言学习之路 (四)结构体与共用体与链表结构体与共用体指向结构体类型数据的指针动态储存分配链表建立动态链表对链表的删除操作对链表的插入操作共用体typedef定义类型说明符,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 结构体与共用体
    • 结构体变量的引用
    • 可以引用成员的地址,也可以取结构体的地址。结构体变量的地址主要用作函数参数传递结构体变量的地址。
    • 结构体数组
  • 指向结构体类型数据的指针
    • 访问形式
    • 结构体变量作函数参数
  • 动态储存分配
    • malloc函数
    • calloc函数
    • free函数
  • 链表
    • 头指针
  • 建立动态链表
  • 对链表的删除操作
  • 对链表的插入操作
  • 共用体
    • 共用体和结构体的比较
    • 共用体类型数据的特点
    • 枚举类型
  • typedef定义类型说明符
      • 关于typedef的一些说明

结构体与共用体

有时需要将不同类型的数据组合成一个有机整体以便于引用。一个学生有学号、姓名、性别、年龄、地址等属性。
struct 结构名
{
成员表列
};
struct student
{
int sum;
char name;
};
(1)先声明结构体类型再定义变量名:
struct student student1, student2; //定义了student1和student2为struct student类型的结构。

(2)声明同时也定义变量
struct 结构体名
{
成员列表
}变量名表列
struct student
{
int num;
}student1,student2;也可以不用结构体名。
结构可以嵌套定义。

结构体变量的引用

结构体变量名.成员名
点是成员运算符,优先级最高。如果成员本身又属于一个结构体,需要用多次成员运算符,只能对最低级进行赋值。

可以引用成员的地址,也可以取结构体的地址。结构体变量的地址主要用作函数参数传递结构体变量的地址。

结构体数组

每一个元素都是一个数组。与数值型结构体差不多,只需要说明定义的是一个数组。
struct student
{
int num;
};
struct student student1[2]={{1},{2}};

指向结构体类型数据的指针

指针变量指向结构体的首地址。定义形式:
struct结构名*结构指针变量名。
要把结构变量的地址赋给指针变量。结构名没有地址,结构名定义的结构变量才有地址。

访问形式

(*结构指针变量).成员名
或为结构指针变量->成员名

结构体变量作函数参数

void print(struct student *);

动态储存分配

C语言提供一些内存管理函数,动态分配内存空间。
(1)分配内存空间函数malloc、calloc
(2)释放内存空间函数free

malloc函数

函数原型void *malloc(unsigned int size);其作用是在内存的动态存储区中分配一个长度为size的连续空间(size是一个无符号数)
此函数的返回值是一个指向分配域起始地址的指针(类型为void)
如果此函数未能成功地执行(例如内存不足),则返回空指针(NULL)

calloc函数

void *calloc(unsigned n, unsigned size);
可以为一位数组开辟空间

free函数

void free(void *p)
释放p执行的地址

链表

重要的数据结构,动态进行存储分配的一种结构

头指针

存放一个地址,该地址指向第一个元素节点,用户需要的实际数据和链接节点的指针。

建立动态链表

程序执行过程中从无到有建立一个链表,一个一个开辟节点和输入分结点数据,并建立前后相链的关系。
实现链表的输出,首先要知道链表第一个结点的地址,也就是需要知道head的值。然后设一个指针变量p,先指向第一个结点,输出p所指的结点,然后使p后移一个结点,再输出,直到链表的尾结点。

对链表的删除操作

从一个动态链表中删去一个结点,并不是真正从内存中把它抹掉,二十把它从链表中分离开。

对链表的插入操作

对链表的插入是指将一个结点插入到一个已有的链表中。为了正确插入,必须解决两个问题:
(1)怎样找到插入位置
(2)怎样实现插入
我们可以先用指针变量p0指向待插入的结点,p1指向第一个结点,将p0->num与p1->num相比较,如果p0->num>p1->num,此时将p1后移并使p2指向刚才p1所指的结点。

共用体

几个不同的变量共占同一段内存的结构称为“共用体”。先定义共用体变量才能引用它,只能应勇共用体变量中的成员。
定义形式:
union 共用体名
{
成员表列
}变量表列;

共用体和结构体的比较

结构体变量所占内存长度是各成员的内存长度之和。
共同体占用内存长度是最长的成员的长度。

共用体类型数据的特点

同一内存段可以用来存放几种,但每一瞬时只能存放一种。起作用的成员是最后一次存放的成员变量。
不能对共用体变量名乙,也不能引用变量名得到一个值,也不能定义共用体变量时对它初始化。

枚举类型

在实际问题中,有些变量的取值被限定在一个有限的范围内。因此,C语言提供了枚举变量。
定义形式:
enum weekend
{
Wednesday; //枚举元素
Monday;
};
enum weekend week;
枚举元素按常量处理。

typedef定义类型说明符

用typedef声明新的类型名来替代已有的类型名
typedef int INTEGER

声明结构类型:
typedef struct{
int month;
int day;
int year;
}DATE;
DATE date_one;
用DATE表示该结构变量的类型名。

声明NUM为整型100个元素的数组变量
typedef int NUM[100];
NUM num;
printf("%dn",sizeof(num));
sizeof=400;

声明为字符型指针
typedef char *P;
P p1;
p1 = “I love Fishc.com”;
printf("%s", p1);

声明POINTER为指向函数的指针类型,该函数返回整型值。
typedef int (*POINTER)();
其它:
typedef void (*P)();

关于typedef的一些说明

有利于程序的通用与移植。没有创造出新的类型。

最后

以上就是鲜艳大树为你收集整理的C语言学习之路 (四)结构体与共用体与链表结构体与共用体指向结构体类型数据的指针动态储存分配链表建立动态链表对链表的删除操作对链表的插入操作共用体typedef定义类型说明符的全部内容,希望文章能够帮你解决C语言学习之路 (四)结构体与共用体与链表结构体与共用体指向结构体类型数据的指针动态储存分配链表建立动态链表对链表的删除操作对链表的插入操作共用体typedef定义类型说明符所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部