7

【简单地过一遍C语言基础部分】所有知识点,点到为止!(仅一万多字)

 2 years ago
source link: https://blog.csdn.net/weixin_50502862/article/details/120265591
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

就在前几天,C语言入门到进阶部分的专栏——《维生素C语言》终于完成了。全文共计十八个章节并附带三张笔试练习篇,美中不足的是,第一章和第二章是以截图形式展现的。由于本人一开始是在有道云笔记上写的初稿,当时想方便省事(有道云排版个人感觉确实比较美观)就直接以截图的形式完成了第一章和第二章。本人考虑到因为是截图,不能复制文中出现的代码,不方便读者进行复制粘贴,所以我打算重新写一下第一章和第一章的内容,并且重新进行了排版。

本章从如何写主函数开始讲起,对C语言基础知识点进行蜻蜓点水地介绍,想看详细讲解教学请订阅专栏!专栏连接:《维生素C语言》

图标说明:

❓ 表示问题

📚 表示知识点

❕ 表示注意

🔍 表示比较

🔨 表示操作/解决方案

💬 代码块

💭 思考/思考题

🚩 运行代码

❎ 可以但是不建议

🅰 .c文件B

🅱 .c文件B

📺 系统环境/编译器/环境

🔺 表示总结

🚫 表示禁止

📜 表示建议

📌 注意事项

🔑 表示解析、答案

💡 解决方案

💀 死循环

🐞 BUG

💊 DEBUG

⚡ 代码优化

👆👇👈👉 方位

## 注:本图标适用于本人所有C语言系列博客!


一、如何写代码

0x00 首先写主函数

❓ 何为main函数?

main函数,又称主函数,是程序执行的起点。

1. 主函数是程序的入口

2. 主函数有且只有一个

📚 一个工程中可以有多个“.c文件”,但是多个“.c文件”中只能有一个“main 函数”

0x01 然后写代码

💬  "你好,世界!"

0x02 最后运行程序

🔨 编译 + 链接 + 运行代码

快捷键: Ctrl + F5VS2013

[调试] -> [选择' 开始执行(不调试)']

❓ “是不是有什么一闪而过了?”

因为程序执行得太快,所以没有看到结果。

为了看到结果,我们需要设置一下 VS2013 的属性 ( VS2019不需要设置项目属性 )

🚩 运行结果如下:

二、数据类型

0x00 基本类型

📚 这里先做些简单的介绍:

💬 基本数据类型的使用方法:

0x01 格式说明

📚 格式说明由“%”和格式字符组成:

💬 演示:

🚩 运行结果: 100 a 5.000000 3.14 hello 0000000000061FE04

0x03 数据类型的大小

📺 32位系统下:

📚 关键字 sizeof :获取数据在内存中所占用的存储空间,以字节为单位计数

💬 使用方法演示:

🚩 运行结果:1

💬 使用 sizeof 求元素个数:

🚩 运行结果: 40  4  10

📚 计算机中的单位: bit - 比特位

计算机中识别二进制:1&0         8进制:0-7        10进制:0-9

 三、变量与常量

0x00 创建变量

 💬 代码演示:

0x01 全局变量和局部变量

💬 局部变量和全局变量的名字相同时,局部变量优先,对局部影响:

🚩 运行结果: 10

0x02 scanf 函数

💬 使用方法演示:

0x03 变量的使用

💬 使用方法演示:写一个代码求两个变量的和

❗ 如果编译器发出了警告,说 scanf 不安全,在代码前面添加

#define _CRT_SECURE_NO_WANRINGS 1

即可,当然还有其他方法可以解决,这里就不细说了。

🚩 运行结果如下:(假设输入了 1 2)

sum = 3

0x04 作用域和生命周期

📚 作用域(scope)

程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用 的 而限定这个名字的可用性的代码范围就是这个名字的作用域。

全局变量的作用域是整个工程。

局部变量的作用域是变量所在的局部范围。

📚 生命周期:

变量的生命周期:变量的创建和销毁之间的时间段

局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束。

全局变量的生命周期:整个程序的生命周期。

💬 局部变量的生命周期:

💬 全局变量的生命周期

0x05 常量

📚 定义:C语言中常量和变量的定义的形式有所差异

C语言的常量分为以下几种:

① 字面常量:直接写

② const 修饰的常变量:用 const 定义

③ #define 定义的标识符常量:宏定义

④ 枚举常量:可以一一列举的常量

💬 字面常量:

💬 const 修饰的常量:

🚩 运行结果: 10

💬 #define 定义的标识符常量:

🚩 运行结果:10000

💬 枚举常量:

📌 注意事项:

const 只是一个有常属性的变量,本质上仍然为变量!arr[], 数组的大小必须是常量!

💬 #define 定义的可以,宏定义用得最多的地方是在数组中用于指定数组的长度:

📌 注意事项:

枚举常量虽然是不能改变的,但是通过枚举常量创造出来的变量是可以改变的!

四、字符串&转义字符&注释

0x00 字符串

📚 定义:

"hello world."

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal)

📚 关于斜杠零:

字符串的结束标志是一个 \0 转义字符。

在计算字符串长度的时候 \0 是结束标志,不算字符串的内容!

💬 下面代码,打印的结果是什么?为什么?

🚩 打印结果如下:

0x01 计算字符串长度

📚 strlen 函数:返回字符串的长度

📜 使用时需引入头文件 <string.h>

💬 代码演示:

 🚩 运行结果如下:  3   随机值

0x02 ASCII 码值

📚 ASCII (American Standard Code for Information Interchange)

“是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符”

0x03 转义字符

📚 转意字符顾名思义就是转变字符的意思。

💬 让斜杠就是斜杠:

 🚩 运行结果:  c:\test\32\test.c

💬 三字母词、输出单引号、ddd、xdd:

🚩 运行结果:  (are you ok??) ' " X A 0

❓ 下列代码打印的结果是什么?

💡 答案:14

0x04 注释

📚 代码中有不需要的代码可以直接删除,也可以注释掉

代码中有些代码比较难懂,可以加一下注释文字

有两种风格:

① C语言风格的注释   /* xxxxxx */

缺陷:不能嵌套注释

② C++风格的注释    //xxxxxxxxx

优点:可以注释一行也可以注释多行

快捷键:Ctrl + /?

💬 演示:

五、分支和循环

 0x00 if 语句

📚 定义:if 语句是指编程语言(包括c语言、C#、VB、java、汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。

💬 选择语句代码演示:

🚩 运行结果:  b比a大

❓  C语言中如何实现循环呢?

1. while 语句

2. for 语句

3. do ... while 语句

这里我们着重先了解下 while 语句。

📚 while 循环的基本概念:while是计算机的一种基本循环模式。当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环。

💬 演示代码:敲三万行代码

❓ 什么是函数?

数学中的函数 f(x) = 2×x+5,C语言中的函数也是一样的。

📚 函数的特点就是:简化代码,代码复用。

💬 代码演示:

📚 要存储1-10的数字,怎么存储?

“C语言给了数组的定义:一组相同类型元素的集合”

定义一个整型数组,最多放十个元素:

💬 代码演示:

八、操作符简单介绍

0x00 算数操作符

❓ 什么是算数操作符?

📚 算术运算符即算术运算符号。是完成基本的算术运算 (arithmetic operators) 符号,就是用来处理四则运算的符号。

💬 代码演示:

0x01 移位操作符

❓ 什么是移位操作符?

📚 移位运算符在程序设计中,是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。

💬 代码演示:

🚩  运行结果: 2 1

0x02 位操作符

❓ 什么是位操作符?

📚 位操作是程序设计中对位模式按位或二进制数的一元和二元操作

💬 代码演示:

0x03 赋值操作符

❓ 什么是赋值操作符?

📚 赋值运算符是双目运算符,用在赋值表达式中。赋值运算符将值存储在运算符左边操作数指定的变量中。

💬 代码演示:

0x04 单目操作符

❓ 什么是单目操作符?

📚 单目操作符,也就是只接受一个操作数的操作符。

💬 逻辑反操作 !

💬 按位取反 ~

💬 前置++

💬 后置++

💬 强制类型转换:

0x05 逻辑操作符

📚 逻辑运算符或逻辑联结词把语句连接成更复杂的复杂语句

逻辑与:两个都为真即为真(and)

逻辑或:一个为真即为真(or)

💬 逻辑与 &&

💬 逻辑或 ||

0x06 条件操作符

📚 条件操作符就是三目操作符

exp1成立,exp2计算,整个表达式的结果是:exp2的结果。

exp1不成立,exp2计算,整个表达式的结果是:exp3的结果。

💬 条件操作符的用法:

0x07 逗号表达式

📚 逗号表达式:逗号隔开的一串表达式。

逗号表达式是从左向右依次计算的。

整个表达式的结果是最后一个表达式的结果。

💬 逗号表达式的用法演示:

0x08 下标引用操作符

📚  [] 就是下标引用操作符。

💬 演示:

0x09 函数引用操作符

📚 调用函数时,函数名后面的()就是函数调用操作符

💬 演示:

九、关键字

0x00 常见关键字

📚 C语言提供的关键字:

1. C语言提供的,不能自己创建关键字

2. 关键字不能做变量名

 这里我们来简单地介绍几个:

💬 auto - 自动的

💬 register - 寄存关键字

💬 typedef - 类型重命名

📚 static - 静态的

1. static修饰局部变量

2. static修饰全局变量

3. static修饰函数

💬 static修饰局部变量

函数中局部变量:

声明周期延长:该变量不随函数结束而结束

初始化:只在第一次调用该函数时进行初始化

记忆性:后序调用时,该变量使用前一次函数调用完成之后保存的值

存储位置:不会存储在栈上,放在数据段

🚩 运行结果: 2 3 4 5 6 7 8 9 10 11

💬 static修饰全局变量

改变该变量的链接属性,让该变量具有文件作用域,即只能在当前文件中使用。

① Global.c:

② test.c:

🚩 运行结果: test.obj : error LNK2001: 无法解析的外部符号 _g_val

💬 static修饰函数

改变该函数的链接属性,让该函数具有文件作用域,即只能在当前文件中使用。

① Add.c:

💬 test1.c:

🚩 运行结果:

test.obj : error LNK2019: 无法解析的外部符号 _Add,该符号在函数 _main 中被引用

0x01 define

📚 define 是一个预处理指令:

1. define 定义标识符常量

2. define 定义宏

💬 define 定义标识符常量:

💬 define 定义宏:

十、指针初探

0x00 指针介绍

❓ 什么是指针?

指针就是地址,地址就是指针。

指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。

💬 变量都有地址,取出变量的地址如下:

🚩 打印出来的是a的地址

💬 定义指针变量,存储地址

* 说明 pa 是指针变量

int 说明 pa 执行的对象是 int 类型的

0x01 解引用操作

如果把定义指针理解为包装成快递,那么“解引用操作”就可以理解为是拆包裹

拆出来的值就是那个变量的值,甚至还可以通过“解引用”来修改它的值。

💬 解引用操作用法:

0x02 指针的大小

📚 指针的大小

“指针的大小是相同的”

❓ 为什么相同?

“因为指针是用来存放地址的,指针需要多大空间,取决于地址的存储需要多大空间”

📺 指针是一种复合数据类型,指针变量内容是一个地址,因此一个指针可以表示该系统的整个地址集合,故按照32位编译代码,指针占4个字节,按照64位编译代码,指针占8个字节(注意:不是64位系统一定占8个字节,关键是要按照64位方式编译)。

32位 - 32bit - 4byte

64位 - 64bit - 8byte

💬 sizeof 计算指针的大小:

32位下都是 4         64位下都是 8

十一、结构体

0x00 什么是结构体

📚 结构体可以让C语言创建出新的类型

“结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂的类型”

💬 使用结构体描述学生 / 描述书:

💬 结构体的初始化:

点操作符和箭头操作符

. 结构体变量.成员

-> 结构体指针->成员


参考文献 / 资料

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

俞甲子 / 石凡 / 潘爱民. 《程序员的自我修养》[M]. 电子工业出版社, 2009-4.

百度百科[EB/OL]. []. https://baike.baidu.com/.

比特科技. C语言基础[EB/OL]. 2021[2021.8.31]. .

📌 本文作者: 王亦优

📃 更新记录: 2021.9.25

❌ 勘误记录: int main写法不统一(道法自然)、sizeof关键字(ztm3726)、逻辑与和逻辑或的符号反了(伍六七_)、一处图标可能产生误解(嵙嵙程序猿)

📜 本文声明: 由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK