欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > day19 C语言收尾及数据结构

day19 C语言收尾及数据结构

2026/3/24 4:49:17 来源:https://blog.csdn.net/luochen330x/article/details/144075982  浏览:    关键词:day19 C语言收尾及数据结构

typedef(类型重命名)

程序员有时候在写某个类型时,对应的那个类型比较长,也比较难记,此时就可以给该类型起个别名  例如:无符号短整形 unsigned short int--->uint16

#include<myhead.h>int main(int argc, const char *argv[])
{//使用类型定义变量: 类型名  变量名;int  int_data;         //定义了一个整形变量int int_arr[5];            //定义了一个整形数组int *int_ptr;             //定义了一个整形指针变量int **int_ptr_ptr;        //定义二级指针变量int *int_ptr_arr[5];      //定义了一个指针数组int (*int_arr_ptr)[5];     //定义了一个数组指针int (*fun_ptr)();           //定义了一个函数指针int (*fun_ptr_arr[5])();     //定义了一个函数指针数组struct Test{int num;double score;}Stu;                      //定义了一个结构体变量//提取上面的类型int  ;         //整形int [5];            //一个整形数组类型int *;             //一个整形指针类型int **;             //二级指针类型int *[5];      //一个指针数组类型int (*)[5];     //一个数组指针类型int (*)();           //一个函数指针类型int (*[5])();     //一个函数指针数组类型struct Test{int num;double score;};                        //结构体类型//将上面的类型进行重命名typedef int  int_data;         //定义了一个整形类型typedef int int_arr[5];            //定义了一个整形数组类型typedef int *int_ptr;             //定义了一个整形指针类型typedef int **int_ptr_ptr;        //定义二级指针类型typedef int *int_ptr_arr[5];      //定义了一个指针数组类型typedef int (*int_arr_ptr)[5];     //定义了一个数组指针类型typedef int (*fun_ptr)();           //定义了一个函数指针类型typedef int (*fun_ptr_arr[5])();     //定义了一个函数指针数组类型typedef struct Test{int num;double score;}Stu;                      //定义了一个结构体类型return 0;
}
#include<myhead.h>//将无符号短整形重新起个别名
typedef unsigned short int  uint16; //将数组类型进行重命名
typedef int int_arr[5];//给函数指针类型重命名
typedef int (*fun_ptr)();//定义一个函数
int demo()
{printf("hello a\n");return 0;
}int main(int argc, const char *argv[])
{uint16  num = 520;   //unsigned short int num = 520;printf("num=%hu, sizeof(num)=%zd\n", num, sizeof(num));int_arr arr;       //此时arr就是长度为5的整形数组,arr就是数组名printf("sizeof(arr) = %zd\n", sizeof(arr));  //20printf("数组元素分别是:");for(int i=0; i<5; i++){printf("%d\t", arr[i]);}printf("\n");//使用函数指针类型定义变量fun_ptr ptr = demo;       printf("sizeof(ptr) = %zd\n", sizeof(ptr));   //8ptr();          //使用函数指针变量调用函数return 0;
}
#include<myhead.h>typedef int *ptr, num;           //ptr是int*的重命名  num是int的重命名typedef struct TT 
{int num;char name[20];
}Stu, *Stu_ptr;int main(int argc, const char *argv[])
{printf("sizeof(ptr) = %zd, sizeof(num) = %zd\n", sizeof(ptr), sizeof(num));Stu s = {1001, "张三"};        //使用结构体类型定义变量//struct TT s = {1001, "张三"};Stu_ptr ptr = &s;           //使用结构体指针类型定义变量//struct TT *ptr = &s;//Stu *ptr = &s;printf("s.num = %d, ptr->name = %s\n", s.num, ptr->name);return 0;
}

typedef和#define的区别

1。typedef是类型重命名语句,必须以分号结尾,而#define是预处理指令,必须以#开头

2.使用这两个重命名一个类型时,几乎没有区别,主要区别在于命名两个类型时。

#include<myhead.h>#define INT int            //宏定义
typedef int int32;         //类型重命名typedef char *PP;       //给double* 重命名
#define FF char *       //宏定义int main(int argc, const char *argv[])
{INT num = 520;        //?printf("num = %d, sizeof(num) = %zd\n", num, sizeof(num));int32 key = 1314;    //?printf("key = %d, sizeof(key) = %zd\n", key, sizeof(key));//使用宏定义变量FF a, b;       //char *a,b;  a是指针类型 b是普通类型//使用类型重命名定义变量PP m,n;             //m和n都是指针类型printf("sizeof(a)=%zd,sizeof(b)=%zd,sizeof(m)=%zd,sizeof(n)=%zd\n", \sizeof(a), sizeof(b), sizeof(m), sizeof(n));return 0;
}

union(共用体)

1.共用体是由相同数据类型或不同数据类型构成的变量的集合,多个成员分享一块内存空间。属于构造数据类型

2.定义格式

union  共用体名
{成员类型1   成员变量1;成员类型2    成员变量2;。。。成员类型n    成员变量n;
};

3.使用方式与结构体一致

4.共用体的多个成员,只占用所占内存最多的那个成员的空间,同时也是共用体变量的大小

5.共用体的每个成员的起始地址都跟共用体变量的起始地址一致

6.共用体一般不能当作函数的形参

7.共用体变量也可以初始化,初始化值用花括号括起来,但是,只能初始化一个值

使用共用体判断当前主机大小端问题

union data
{int num ;    //整形成员char key;   //字符成员
};int main(int argc, const char *argv[])
{//使用共用体定义变量union data temp;//给整形成员进行赋值temp.num = 0x12345678;//使用其字符数据//temp.key //?if(temp.key==0x12){printf("大端存储\n");}else if(temp.key==0x78){printf("小端存储\n");}return 0;
}

enum(枚举)

1.枚举是解决C语言中的“魔鬼数字”(看不懂的数字)

#ff1200--->rgb(红色)

2.C语言可以给某些类数字进行命名的 例如颜色

3.枚举中的每个值,都是一个数字,整形数字

4.枚举的定义格式

      enum 枚举名
{名称1  数字1,名称2  数字2,。。。名称n  数字n;
}         //此处不需要加分号
举个例子:
enum Color
{red = 10,//如果不赋值默认从0开始orange 11,yellow 12,green 13,cyan 14,blue 15,puple 16};

C语言中的关键字总结

数据结构

1.数据结构主要研究的是程序在运行过程中,数据的临时容器的问题

        该容器仅仅只在程序运行时,短暂的保存数据,以便于程序能够快速处理数据

        保存数据-->提供内存空间(数据容器)

        处理数据-->对容器提供算法(增删改查)

2.数据结构是一种思想,并不局限于某个编程语言

3.数据结构分为两部分:数据、结构

4.主要注重逻辑思维,画图分析

数据的概念

         数值数据:如整数、小数、字符数据

        非数值数据:图片、视频、音频

数据元素:能够完整描述某一事物的数据的基本单位

        例如:一个学生的完整信息:姓名、学号、性别、分数

数据项:用于组成数据元素的不可分割的最小单位

        例如:一个学生信息的某一项

数据对象:由多个数据元素构成,用于研究的一个整体。

        例如:一个班级的整体学生信息,就是一个数据对象

多个数据项组成数据元素->多个数据元素组成数据对象->多个数据对象组成数据

数据结构中,是以数据元素为单位进行研究数据的

结构的概念

1.数据元素与数据元素的关系(关联情况)

2.根据关联情况,将结构分为两类:存储结构、逻辑结构

逻辑结构

1.逻辑结构:就是数据元素和数据元素之间的关联情况,根据不同的关联情况,分为四种逻辑结构:

        集合结构、线性结构、树形结构、图形结构

2.集合结构:数据元素之间没有任何关联情况,仅仅只是在同一个集合中。

         例如一个篮子里的多个水果

3.线性结构:数据元素与数据元素之间存在一对一的关系

        例如:排队做核酸,一个弹夹中的所有子弹

4.树形结构:数据元素和数据元素之间存在一对多的关系‘

        例如:族谱、公司组织构架

5.图形结构:数据元素之间存在多对多的关系

        例如:朋友关系

存储结构

1.所谓存储结构,就是逻辑结构在计算机物理内存上的存储方式(映射)也分为四种结构

        顺序存储、链式存储、索引存储、散列存储(哈希存储)

2.顺序存储:使用一段连续的物理内存存储数据元素。特点:逻辑上相邻,物理内存上也相邻

3.链式存储:已用一段不一定连续的存储空间存储数据元素。逻辑上相邻,物理上不一定相邻

4.索引存储:在存储数据元素后,附加一张索引表,标识每个数据元素所在的物理内存位置(书的目录)

5.散列存储:存储数据的物理地址跟数据元素的关键字相关 

线性表

1.所谓线性表就是用多个相同特征元素组成的线性结构        

        相同特征:表示每个数据元素类型一致

        线性结构:数据元素之间存在一对一的关系

2.线性表的特点:在线性表中,除了第一个元素没有前驱最后一个元素没有后继外,其余每个元素有且仅有一个前驱一个后继

        前驱:当前元素前面那个元素称为该元素的前驱

        后继:当前元素后面那个元素称为该元素的后继

分类

按照存储方式:

        顺序表:顺序存储的线性表,使用一段连续的存储空间来存储该线性表

        链表:链式存储的线性表,使用不一定连续的内存空间来存储该线性表

按受限方式:

        栈:其插入和删除操作只允许在同一端进行的线性表

        队列:要求其插入和删除操作在不同端进行的线性表

顺序表

顺序存储的线性表

如何解决顺序存储?

        1.可以使用数组

        2.可以在堆区申请一段空间

如何解决顺序表的元素个数

        引入一个变量,记录顺序表的长度

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词