7.17C语言

笔记

杂项

二.共用体

2.1共用体的引入目的

        当需要将多个变量共享同一块内存时,可以使用共用体

2.2定义及初始化

        1)概念:由相同数据类型或不同数据类型构成的集合,但是,该集合中的成员共享同一块内存空间

        2)定义格式

                        union        共用体名称

                        {

                                成员类型1        成员变量1;

                                成员类型2        成员变量2;

                                ...........

                                成员类型n        成员变量n;

                        }

        3)共用体初始化

                共用体初始化与结构体一致(初始化给定一个值即可,因为成员共享一块内存空间)

        4)共用体访问成员跟结构体一致

        5)共用体成员中可以包含基本数据类型,也可以包含构造数据类型

        6)共用体变量的大小,是所有成员中占内存最大的成员的大小

        7)共用体变量一般不作为函数参数传递

三.类型重定义

3.1引入目的

当程序员写程序时,可能会因为数据类型的问题,在定义变量时,导致该程序比较晦涩难懂。

为了提高代码的简洁性,以及为了更加方便理解使得代码更加优雅,我们可以将这些类型重新起一个简洁好记的名字

3.2使用方式

        1)类型重定义,我们引入关键字typedef

        2)使用方法:typedef         旧名字        新名字

                        类如:typedef        unsigned        long         int        uint64       

3.3目前所接触过的数据类型
int  a;              //定义一个普通变量,变量名为 a
int arr[5];            //定义一个长度位5的整型数组,数组名位arr
int *ptr;             //定义一个一级指针变量,变量名为ptr
int **pptr;            //定义了一个二级指针变量,变量名为pptr
int *ptr_arr[5];       //定义一个长度为5的指针数组,数组名为ptr_arr
int (*arr_ptr)[5];      //定义了一个数组指针,指向长度为5的数组,变量名为arr_ptr
int (*fun_ptr)(void);    //定义了一个函数指针变量,指向返回值为int参数为空的函数,变量名为fun_ptr
int (*fun_ptr_arr[5])(void);   //定义了一个函数指针数组,数组名为fun_ptr_arr



//提取类型

int  ;              //定义一个普通变量类型
int [5];            //定义一个长度位5的整型数组类型
int *;             //定义一个一级指针变量类型
int **;            //定义了一个二级指针变量类型
int *[5];       //定义一个长度为5的指针数组类型
int (*)[5];      //定义了一个数组指针类型
int (*)(void);    //定义了一个函数指针变量类型
int (*[5])(void);   //定义了一个函数指针数组类型


//将上面的类型进行重定义

typedef int  a;              //定义一个普通变量,变量名为 a
typedef int arr[5];            //定义一个长度位5的整型数组,数组名位arr
typedef int *ptr;             //定义一个一级指针变量,变量名为ptr
typedef int **pptr;            //定义了一个二级指针变量,变量名为pptr
typedef int *ptr_arr[5];       //定义一个长度为5的指针数组,数组名为ptr_arr
typedef int (*arr_ptr)[5];      //定义了一个数组指针,指向长度为5的数组,变量名为arr_ptr
typedef int (*fun_ptr)(void);    //定义了一个函数指针变量,指向返回值为int参数为空的函数,变量名为fun_ptr
typedef int (*fun_ptr_arr[5])(void);   //定义了一个函数指针数组,数组名为fun_ptr_arr
3.4#define与typede的区别

        1)#define是宏定义,使用宏名取代字符串,typedef是进行类型重命名,要求必须给定的是数据类型

        2)#define是预处理指令,预处理时,进行替换,typede时C语言语句,发生在程序执行阶段

        3)在使用上面两种方式命名一个变量时,没有太大区别,但是,命名多个不同类型变量时,就有区别了

四.内存划分

        1)一个进程一旦启动后,操作系统会为其分配4G的虚拟内存

        2)分为两个部分:内核空间(1G高地址)、用户空间(3G低地址)

        3)多个进程独立拥有0—3G用户空间,共享3—4G的内核空间

              用户空间又分为多个部分,具体如图所示

4)通过指令:cat/proc/进程ID/maps        可以查看当前进程的内存分布

5)使用指令:pamp -d  进程ID号        可以查看当前进程所有的空间分配大小

(查看ID号:pidof 执行文件名)

五.动态内存分配和回收

        1)对于堆区空间的数据,我们也可以利用起来,对于栈区的内存空间,会随着所在的函数空间的结束而结束

        2)可以在堆区由程序员手动申请一片内存来使用,其生命周期到程序员手动释放该空间为止,或者整个程序结束

        3)对堆区空间的使用函数

六.预处理指令

        1)预处理指令,执行在分布编译的预处理阶段,所有的预处理指令都是以#开头,没有分号结束

        2)文件包含指令:相当于将引入的文件中的内容,在引入部分写了一份

        3)宏定义指令:就是定义一个常量,用宏名表示后面的字符串,使用中,只替换不计算不做正确性检测

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值