「期末」一文带你系统回顾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 的小伙伴没有体验过,所以在 ...
随机推荐
- Web项目自动打开并且全屏
前言 在项目当中,有些需要开机自动打开并且还要全屏.通过总结,得到以下结论:大致方法一样(IE.火狐.谷歌支持),个别的只是命令不同,以火狐浏览器为例. 浏览器全屏打开指定网页设置方法 新建浏览器快捷 ...
- join方法个人理解
首先抛出对join的疑问 如果我有一个a线程,一个b线程 那此时 a.start(); b.start(); a.join(); b.join(); 是否意思是a线程先执行完,然后再执行b线程; 如果 ...
- 小白自制Linux开发板 二. u-boot移植
上一篇:小白自制Linux开发板 一. 瞎抄原理图与乱画PCB 中我们做了一个小型而没用的开发板,用的是Licheepi Nano的镜像,那从本篇开始我们开始自己构建它的灵魂吧. 我们都知道,PC在 ...
- EF Core Sequence contains no elements
一.在.Net Core中使用Ef的聚合函数报错: 类似函数: 1,使用FirstOrDefault() 来代替 First() 2.使用SingleOrDefault 来代替 Single 3.使用 ...
- keepalived 安装和配置解析
Keepalived的特性 配置文件简单:配置文件比较简单,可通过简单配置实现高可用功能 稳定性强:keepalived是一个类似于layer3, 4 & 7交换机制的软件,具 ...
- linux kill信号详解
大家对kill -9 肯定非常熟悉,在工作中也经常用到.特别是你去重启tomcat时.可是多半看来,我们对-9的理解只是表面而已. 很少有人(包括我)认真的去了解一下 kill -n 这个n到底是什么 ...
- 题解 CF736D Permutations
link Description 现在,你有一个二分图,点数为 \(2n\). 已知这个二分图的完备匹配的个数是奇数. 现在你要知道,删除每条边后,完备匹配个数是奇数还是偶数. \(1\le n\le ...
- 洛谷3809 SA模板 后缀数组学习笔记(复习)
其实SA这个东西很久之前就听过qwq 但是基本已经忘的差不多了 嘤嘤嘤 QWQ感觉自己不是很理解啊 所以写不出来那种博客 QWQ只能安利一些别人的博客了 小老板 真的是讲的非常好 不要在意名字 orz ...
- 改善深层神经网络-week1编程题(Regularization)
Regularization Deep Learning models have so much flexibility and capacity that overfitting can be a ...
- no_code团队介绍和bingduoduo项目采访
项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求 团队作业-团队介绍和采访 成员简介 name avatar intro PM Dev Test UI/Front-End 伦泽标 ...