「期末」一文带你系统回顾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 的小伙伴没有体验过,所以在 ...
随机推荐
- c++ class里面成员和分配内存问题
慢慢开始学c++啦,记录学习的大体过程 class中神奇的内存(sizeof) 1.内存补齐 便于管理类(生成的对象)的内存,类总内存总是为最大成员字节大小的倍数,不足的会进行内存补齐 类的整体内存就 ...
- Java-爬虫-小项目
爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 项目地址:https://gitee.com/zwtgit/java-reptile 导入依赖,写一个工具类 <depend ...
- SQL实例_11Oracle基本操作
前言导读 本章介绍了在正常使用Oracle数据库之前进行的常规操作 本章语句的运行需要子啊PLSQL软件中运行 本章导入导出语句需要在虚拟环境中直接运行 1 Oracle创建表空间和用户 --1 创建 ...
- 搭建hexo博客遇到的问题
搭建hexo博客遇到的问题 常用命令 hexo clean 清除hexo缓存 hexo generate 生成文章 hexo deploy 部署 hexo new post name 新建文章名 he ...
- $\text {FWT}$学习笔记
\(\text {FWT}\) 学习笔记 正常项的\(\text {FWT}\) 在\(\text {OI}\)中,我们经常会碰到这种问题: 给出一个长度为\(n\)的序列\(a_{1,2,...,n ...
- javascript-jquery的基本方法
1.去除字符串中两端的空格$.trim(str) var str1=" 123 " $.trim(str1);//123 2.遍历对象的数据并进行操作$.each(obj,func ...
- Java继承中父类和子类构造函数的问题
父类有无参构造函数时(显示或隐式),子类的有参和无参构造函数都是默认调用父类的无参构造函数:当父类只有有参构造函数时,子类可以有有参和无参构造函数,子类有参构造函数必须显式调用父类的有参构造函数,子类 ...
- Coursera Deep Learning笔记 逻辑回归典型的训练过程
Deep Learning 用逻辑回归训练图片的典型步骤. 笔记摘自:https://xienaoban.github.io/posts/59595.html 1. 处理数据 1.1 向量化(Vect ...
- IDEA 激活码,最新激活码,亲测有效,持续更新(2021.10.26)
这里整理了一份 IntelliJ IDEA的最新激活码,持续更新 获取链接:[腾讯文档]分享白嫖JB Account和激活码(并附带破解工具) https://docs.qq.com/doc/DVnB ...
- 基于jpa的specification实现动态查询
spring data jpa为我们实现简单的crud操作提供了极大的方便.但大部分情况下,系统中都存在大量的动态查询操作,这个时候就可以借助spring data jpa的 Specificatio ...