超详细 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 语言的更多相关文章

  1. 面试都在问的「微服务」「RPC」「服务治理」「下一代微服务」一文带你彻底搞懂!

    ❝ 文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) ❞ 单体式应用程序 与微服务相对的另一个概念是传统的「单体式应用程 ...

  2. 「MoreThanJava」一文了解二进制和CPU工作原理

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  3. 「六」创建一个带 weblogic 服务的基础镜像

    Weblogic Weblogic 简单介绍以及其在 Docker 环境下的特殊应用 WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE ...

  4. 「五」创建一个带 tomcat 服务的基础镜像(修订版)

    Tomcat Tomcat 简单介绍 Tomcat server是一个免费的开放源码的Web 应用server,属于轻量级应用server.在中小型系统和并发訪问用户不是非常多的场合下被普遍使用,是开 ...

  5. 「两」创建一个带 ssh 镜座服务(修订版)--采用 Dockerfile 创

    创建目录 首先,创建一个叫做 sshd_ubuntu 的目录,用于存放我们的 Dockerfile .脚本文件.以及其它文件. $ mkdir sshd_ubuntu $ ls sshd_ubuntu ...

  6. 如何用win10自带linux系统学习c语言---解决gdb使用问题

    1.windos store---ubuntu18 2.改安装源 3.装gcc   apt-install 即可 4.装gdb       apt-instll 即可 5.写helloworld 记做 ...

  7. 「MoreThanJava」机器指令到汇编再到高级编程语言

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  8. 「MoreThanJava」Java发展史及起航新世界

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  9. 一个只需要点 「下一步」就完成监控 Windows

    Cloud Insight 此前已然支持 Linux 操作系统,支持20多中数据库中间件等组件,多种操作,多种搭配,服务器监控玩的其乐无穷啊!但想想还有许多 Windows 的小伙伴没有体验过,所以在 ...

随机推荐

  1. Ubuntu安装Oracleclient远程连接数据库

    平时Oracle数据库都安装在本地或者WindowsServer上进行使用,但因为工作需要,领导要求在虚拟机中安装Ubuntu来连接Windows本地安装的数据库,先将操作过程和遇到的问题进行梳理总结 ...

  2. UDP用户数据报

    UDP 用户数据报协议UDP只在IP的数据报服务之上增加了很少的一个功能,就是复用,分用,差错检测功能.UDP的主要特点是: UDP是无连接的,即在发送数据报之前不需要建立连接(当然发送数据结束的时候 ...

  3. go语言游戏服务端开发(四)——RPC机制

    五邑隐侠,本名关健昌,12年游戏生涯. 本教程以Go语言为例. RPC指远程方法调用,游戏里引入RPC目的是降低跨进程交互的复杂度. 游戏业务设计为多go routine,一个玩家一个go routi ...

  4. SpringPlugin-Core在业务中的应用

    前言 一直负责部门的订单模块,从php转到Java也是如此,换了一种语言来实现订单相关功能.那么Spring里有很多已经搭建好基础模块的设计模式来帮助我们解耦实际业务中的逻辑,用起来非常的方便!就比如 ...

  5. Python Pandas的使用 !!!!!详解

     Pandas是一个基于python中Numpy模块的一个模块 Python在数据处理和准备⽅⾯⼀直做得很好,但在数据分析和建模⽅⾯就差⼀些.pandas帮助填补了这⼀空⽩,使您能够在Python中执 ...

  6. 创建HTML文档

    目录 创建HTML文档 构筑基本的文档结构 DOCTYPE元素 DOCTYPE元素 代码清单1 使用DOCTYPE元素 html元素 html元素 代码清单2 使用html元素 head元素 head ...

  7. 创建第一个Android项目

    目录 创建第一个Android项目 创建HelloWorld项目 选择模板 选择模板界面的英文翻译 配置项目 配置项目界面英文翻译及解释 配置项目界面的注意事项 Name的命名规范 Package n ...

  8. javascript-原生-面向对象

    1.javascript面向对象程序设计 概述:javascript不想其他面向对象编程语言那样有类的概念,javascript没有类(构造函数)的概念,只有对象的概念. 2.理解javascript ...

  9. JavaScript05

    显示和隐藏 元素的显示和隐藏 元素display属性可控制元素的显示和隐藏,先获取元素对象,再通过点语法调用style对象中的display属性 语法格式: 元素.style.display='non ...

  10. 搬运1:关于对C语言中数组名取地址加减等操作的一点探究

    对于数组名取地址强制转换的操作 偶然在晚上学了C语言指针后网页闲逛找题时,被一个数组名取地址搞糊涂了,在自己试验加探索后我稍微悟了一点东西. 代码如下: #include<stdio.h> ...