C语言总结

C语言总结

特点:C语言是一个面向过程、静态类型的、编译型的高级编程语言
编译:C语言需要经过编译器将其转换成对应平台能够认可的机器码,然后才能在目标机器上运行,C语言只是一个让程序员用来控制设备的一个工具。
编译步骤:
1、预处理(预处理器 宏定义,文件包含,条件编译)—去掉注释,宏展开与替换,文件的包含
2、编译(编译器将预处理后的代码进行语法的词法分析,转换成一个汇编文件)—.s
3、汇编(汇编器,将汇编代码转换成机器码01构成的序列)—.o文件
4、链接
编译程序 gcc
制作动态库 gcc -shared -fPIC
-E 只做预处理
-c 编译汇编不链接
-S 只编译不会变
-g 生成带调试的文件,供给gdb程序
3、开发C语言程序的工具:vscode

数据类型

数据类型的分类:
基本数据类型:整数类型,浮点类型,字符类型
构造类型:数组(数组名是常量),结构体,联合体,枚举
指针类型:数据类型 *variable
无类型: void 使用时需要强转成具体的数据类型

基本数据类型:
整数类型:短整型short,基本整型 int 长整型:long
二进制,八进制012,16进制0xa
按照有无符号:有符号整数signed(默认)可以表示负数
无符号整数unsigned’
补充:在内存中的表示

实型;float 4个字节
double 8个字节
补充:在内存中的表示

字符型:单个ASCII字符 本质是一个单字节的整型。 0-255

构造类型
数组类型:多个同类型的一个集合。
数组初始化:静态初始化,动态初始化(memset())
元素的访问:通过索引下标访问
数组元素的修改
数组的遍历:for或while循环对元素进行遍历
只读数组:const 数据类型 数组名[N] =
查看数组长度: sizeof(arr)/size(arr[0])
数组名代表首元素的地址 arr == &ar[0] 本质数组时一个常量指针。不能对数组名重新赋值

结构体
就是将不同类型组合在一起的自定义类型
声明:
struct 类型名
{
成员1;
成员2;

};
如果定义一个结构体变量:
struct 类型名 变量名
声明结构体类型的时候定义变量
初始化结构体变量:变量名也是不可改变的值
访问结构体中的成员:结构体变量名.成员名
结构体数组
结构体的对齐:
从0地址开始,当前成员所占字节的整数倍
结构体整体占用的空间必须是成员占用空间最大那个成员的整数倍
设置对齐系数与自身对齐系数那个小按谁的来

联合体
特点:定义共用体中的成员共享一段内存,在任何时候,只有一个成员的访问是有效的

union 类型名
{
成员名1;
成员名2;
};

定义联合体变量:union 类型名 变量名;
成员初始化:变量名.成员名 = 值

枚举
特点:枚举是将有限个可能的取值放在一起,其中每个值必须是一个字符型或整数类型
声明格式:enum 枚举名[val1…val];
定义变量:enum 枚举名,变量名
enum 枚举名 变量名 = 集合中的是某个取值 //如果在初始化枚举时,如果没有赋值,默认从0开始

指针:某个变量所占内存块的首地址,指针的本质是一个地址(正整数)
指针变量:存放其他变量地址的变量
定义格式: 数据类型 *variable
初始化指针变量。
1、变量在解引用前需要显示的初始化
2、指针类型要与指向类型要一致
指针变量可以做为函数的形参,当作为函数形参是一种地址传参方式
任何对形参指向空间数据的修改都会影响到实参
指针变量值得修改不会影响到实参

指向函数入口地址的指针:
返回类型 (*指针名)(形参列表)
作用:通过函数指针可以实现函数的调用,作为函数的形参

程序结构
算法用程序结构来构建
程序 = 数据结构 + 算法
程序结构:顺序结构,选择结构,循环结构

函数
封装代码,利用代码能够复用,将复杂问题简单化
函数签名和函数名。

函数分类:
从参数角度:有参函数和无参函数
根据返回值的角度:有返回值函数,无返回值函数
从用户角度:用户自定义角度、库函数

函数传参:
值传递和地址传递
值传递:单向的
地址传递:适合传规模较大的数据集合,函数内部的一个或多个结果返回给外部的调用

递归函数:倒序循环到最初值
注意递归的边界条件,即最初值
能用递归的地方基本可以用循环代替

作用域与生存期
局部变量:在堆或栈空间
全局变量:具有文件域的变量,在静态内存空间

存储类型:static extern register auto
[存储类型]数据类型 变量名;
数据类型确定了在内存空间中占用空间的大小
变量名:标签名
存储类型:确定变量的存储位置和生命周期

内存四区:
code代码区:存放程序中代码,它是只读的
栈区:函数中定义的非静态局部变量,编译器赋值自动申请与释放 1M
堆区:用户自行申请的区域,该区域资源比较丰富,最大可达1G,程序员自行申请与释放 malloc申请 realloc,free释放
静态存储区:存储程序中的字符串,常量,全局变量,静态变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值