「期末」一文带你系统回顾C 语言
超详细 c 语言回顾
前言
c 语言是一种底层语言,是一种系统底层级的语言,例如Windows、Linux、Unix等操作系统就是使用c语言编写的。所以由此看来,不论是火爆了25年的Java,还是近年来愈来愈流行的Python,它们虽外表光鲜亮丽,但c语言就是内在的灵魂,朴实无华。
c 语言特性
c 语言既然这么重要,但是它有什么值得我们去学的地方呢?难道我们就因为听到别人说它重要我们才去学习吗?我想我们更加在意的是学完我们能掌握些什么,能让我们获得什么。
c 语言的设计
c 语言是1972年,贝尔实验室在开发Unix操作系统是设计了c 语言。c 语言是一门流行的语言,它把计算机科学理论和工程实践完美的融合在一起,使用户能够完成模块化的编程和设计。
c 语言具有高效性
c 语言是一门高效的语言,它被设计用来充分发挥计算机的优势,因此c 语言程序运行速度很快,c 语言能够合理的通过操纵内存来获取最大的运行速度。
c 语言的可移植性
顾名思义,可移植性就意味着,对于在一台计算机上编写的c语言程序可以在另外一台计算机上轻松地运行,从而极大的减少了程序移植的工作量。
c 语言特点
- 简洁:因为c语言设计更加靠近底层,因此不需要有像Java、c# 等高级语言才有的特性,程序的编写要求不是很严格。
- 结构化:它提供的控制语句具有结构化特征,如for循环、if.... else 判断语句和switch语句等。
- 数据类型丰富:不仅有传统的字符型、整形、浮点型、数组 类型等数据类型,还有其他编程语言没有的数据类型,例如指针。
- c 语言能够直接对内存地址进行读写,因此可以实现汇编语言的主要功能,并直接可以操作硬件。
- c 语言速率快,生成的目标代码执行效率高。
下面着重整理下c 语言知识点
程序的环境和预处理
环境
环境分为执行环境和翻译环境——预编译、编译、汇编、链接;
预处理
预定义符号:
- _ FILE _ //进行编译的源文件
- _ LINE _ //文件当前的行号
- _ DATE _ //文件被编译的日期
- _ TIME _ //文件被编译的时间
- _ STDC _ //如果编译器遵循ANSI C,其值为1,否则未定义
数据
数据类型
整形:
char:
unsigned char , signed char;
short:
unsigned short [int]
signer short [int]
int :
unsigned int
signed int
long :
unsigned long [int]
signed long [int]
浮点型:
- 单精度浮点型:float
- 双精度浮点型:double
构造类型:
- 数据类型
- 结构体类型 struct
- 枚举类型 enum
- 联合类型 union
指针类型:
空类型:
存储类型
整形:在内存中存放的是补码
常量变量
常量
常量分为:字面常量、const定义的常量、#define定义的标识符常量、枚举常量。
变量
变量需要注意变量的命名规则,变量的初始化和赋值、以及根据是否有static修饰分为:全局变量和局部变量。
作用域
作用域分为:代码块作用域、文件作用域、原型作用域、函数作用域。
链接属性
至于这个概念我们应该基本了解什么是外部链接属性,什么是内部链接属性以及什么是无属性即可。
语句
- 表达式语句:在表达式结尾加上分号称之为表达式语句;
- 循环语句:例如while语句,do .... while 语句,for 语句,以及 break 和 continue 的用法;
- 分支语句:if 语句,switch 语句,goto 语句(少用);
- 空语句(特别注意):只有一个分号的语句,不执行任何操作的语句。
操作符
操作符在实际编程中用到的也比较多,在这里仅仅采用提示性的方式列举一部分。
算术运算符:(+ - * / %)、移位操作符(<< 左移 ; >> 右移)、 位操作符(& 按位与,| 按位或 ,^ 按位异或)、 赋值操作符( = )、 复合操作符(+= , -= ,*= ,/= ,%=,>>=,<<= ,&=,|=,^=,)。
单目运算符的回顾
逻辑反操作(!)、负 值(-)、正值(+)、取地址(&)、操作数的类型长度(以字节为单位 sizeof)、对一个数的二进制按位取反(~~)、间接访问操作符(解引用操作符 *)、(类型)强制类型转换。
还有一些较为常见的关操作符,逻辑运算符 :逻辑与(&&)、逻辑或(||),条件操作符、逗号表达式、下标引用、函数调用和结构成员等也要进行联想,明白各个术语到底是怎么回事。同时我们也要明白操作符的优先级、结合性以及是否控制求值顺序这些属性。
函数
函数的分类:
函数是由函数名、函数参数、语句项和返回类型构成的为了单独实现某种功能而编写的子程序。函数一般分为库函数和自定义函数。比较常见的库函数有IO函数,字符串操作函数,字符操作函数,内存操作函数,时间/日期函数,数学函数,其他库函数等。另外如果想了解更多 c 语言的库函数,可以访问http://www.cplusplus.com/reference/ 去详细的了解库函数。同时在自定义函数时像函数的参数不要过多,代码的可复用性以及函数参数和返回值的设计是否满足功能的要求等都需要注意。
函数的声明和定义:
函数的声明就是要告诉编译器有一个函数叫什么,参数是什么,返回类型是什么,但是具体是不是存在,无关紧要;同时,声明一般出现在函数使用之前,要满足先声明后使用这一条件;另外,函数的声明一般要放在头文件中。
函数的调用:分为传值调用,地址调用,嵌套调用和链式访问。
数组
数组创建和初始化后在内存中从低地址到高地址连续存放。数组又分为一维数组,多维数组(存放着n-1 维的一维数组)和指针数组(数组里存放着指针元素)——例如:int *arr[10] 。
创建数组后需要使用时,这就需要我们对数组进行访问。数组的访问有下标访问和指针访问两种形式。
指针
指针就是用来存放地址的变量。指针除了常见的基本类型外,还有数组指针,函数指针,如果想要详细的学习下指针,可以参考下我之前写过的一篇文章。在这篇文章里可以较为深入的了解下指针。同时在这里也要特别提起两个名词:解引用和二级指针。解引用就是取出指针所指向地址处的值;二级指针就是存放一级指针地址的指针。
字符函数和字符串函数
c 语言中对字符和字符串的处理很是频繁,但是 c 语言本身是没有字符串类型的,字符串通常放在常量字符串或者字符数组中。要想进一步了解字符串相关的函数,可以在公众号后台回复 c语言知识点 获取已被整理好的完整的思维导图。
动态内存管理
动态内存函数有 “malloc,calloc,realloc,free”。动态内存一般有如下常见的错误:
- 对NULL指针的解引用操作
- 对动态开辟空间的越界访问
- 对非动态开辟内存使用free释放
- 对同一动态内存多次释放
- 动态开辟内存忘记释放(内存泄露)
后记
最后友情提示,公众号【编程有料】后台回复 c语言知识点可以获取与文章相关的思维导图哦 ~ ~
「期末」一文带你系统回顾C 语言的更多相关文章
- 面试都在问的「微服务」「RPC」「服务治理」「下一代微服务」一文带你彻底搞懂!
❝ 文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) ❞ 单体式应用程序 与微服务相对的另一个概念是传统的「单体式应用程 ...
- 「MoreThanJava」一文了解二进制和CPU工作原理
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- 「六」创建一个带 weblogic 服务的基础镜像
Weblogic Weblogic 简单介绍以及其在 Docker 环境下的特殊应用 WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE ...
- 「五」创建一个带 tomcat 服务的基础镜像(修订版)
Tomcat Tomcat 简单介绍 Tomcat server是一个免费的开放源码的Web 应用server,属于轻量级应用server.在中小型系统和并发訪问用户不是非常多的场合下被普遍使用,是开 ...
- 「两」创建一个带 ssh 镜座服务(修订版)--采用 Dockerfile 创
创建目录 首先,创建一个叫做 sshd_ubuntu 的目录,用于存放我们的 Dockerfile .脚本文件.以及其它文件. $ mkdir sshd_ubuntu $ ls sshd_ubuntu ...
- 如何用win10自带linux系统学习c语言---解决gdb使用问题
1.windos store---ubuntu18 2.改安装源 3.装gcc apt-install 即可 4.装gdb apt-instll 即可 5.写helloworld 记做 ...
- 「MoreThanJava」机器指令到汇编再到高级编程语言
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- 「MoreThanJava」Java发展史及起航新世界
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- 一个只需要点 「下一步」就完成监控 Windows
Cloud Insight 此前已然支持 Linux 操作系统,支持20多中数据库中间件等组件,多种操作,多种搭配,服务器监控玩的其乐无穷啊!但想想还有许多 Windows 的小伙伴没有体验过,所以在 ...
随机推荐
- Flask SSTI利用方式的探索
Flask SSTI利用方式的探索 一.SSTI简介&环境搭建 一个统一风格的站点,其大多数页面样式都是一致的,只是每个页面显示的内容各不相同.要是所有的逻辑都放在前端进行,无疑会影响响应 ...
- 11.4.2 LVS—NAT
Virtual Server via NAT(VS-NAT) 用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,, ...
- 将Oracle数据库数据每天备份恢复一次数据到另一台服务器上两份数据
1.创建用户,授权,创建测试数据 创建用户 CREATE USER test identified by 123; 授权 grant dba to test; 创建测试数据 create table ...
- 题解 GT考试
题目传送门 题目大意 给出\(n,m,k\),以及一个长度为\(m\)的数字串\(s_{1,2,...,m}\),求有多少个长度为\(n\)的数字串\(X\)满足\(s\)不出现在其中的个数模\(k\ ...
- Golang通脉之包的管理
在工程化的开发项目中,Go语言的源码复用是建立在包(package)基础之上的. 包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言提供了很多内置包,如fmt.os.io等. ...
- kivy画板
from kivy.app import App from kivy.graphics import Line, Color # 引入绘图线条,颜色 from kivy.uix.widget impo ...
- 记一次 .NET 某资讯论坛 CPU爆高分析
大概有11天没发文了,真的不是因为懒,本想前几天抽空写,不知道为啥最近求助的朋友比较多,一天都能拿到2-3个求助dump,晚上回来就是一顿分析,有点意思的是大多朋友自己都分析了几遍或者公司多年的牛皮藓 ...
- InitSpatialMetaData()速度慢的问题
解决方法:with sqlite3.connect(dbfile) as con: con.enable_load_extension(True) con.execute("SELECT l ...
- Java并发:AbstractQueuedSynchronizer(AQS)
队列同步器 AbstractQueuedSynchronizer 是一个公共抽象类.提供一个同步器框架,用于实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量,事件等).使用一个 in ...
- 升级 dubbo 小心 default.version
上周遇到个关于升级dubbo 2.6 到2.7的兼容性问题,差点造成线上故障,这里记录下,也给大家提个醒. 问题回放 有一个接口的提供方(dubbo 2.6.6)这么配置接口的版本号 <dubb ...