C语言的笔记

C语言 (Windows)环境配置·

代码编辑器·

  • 首推VS Code,这是一款由微软开发的免费开源的现代化轻量级代码编辑器,支持几乎所有主流的编程语言的开发、语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,支持插件扩展,并针对网页开发和云端应用开发做了优化。软件跨平台支持 Win、Mac 以及 Linux,运行流畅,软件小巧精致。

    安装地址:VS Code官网下载
    百度云(版本:win64位-1.40.2)链接: https://pan.baidu.com/s/1lkAnve07Zk0pDGXMtJ8HSw 提取码: rh99

  • 其次就是学生党们可能还在用的Visual C++ 6.0

    百度云 链接: https://pan.baidu.com/s/10-YF4j3q5-1ElOBiKOM-tg 提取码: rdqq

  • GCC的话。。。有点麻烦不推荐,为了在 Windows 上安装 GCC,您需要安装 MinGW。为了安装 MinGW,请访问 MinGW 的主页 https://www.mingw.org,进入 MinGW 下载页面,下载最新版本的 MinGW 安装程序。如果想弄的话下面这个链接

    windows下安装MinGW及C++的环境配置

C 程序结构·

其实刚学C语言的时候,不要觉得这串代码很奇怪,那串代码也很奇怪。每当遇到一个陌生代码的时候,我会先假设它有一个特殊用途,然后忽略掉它的陌生感带来的恐惧。随着学习的深入,你迟早会学到这个曾经陌生的代码的用处。

  1. 首先先了解以下C程序的结构
  • C 程序主要包括以下部分:
  • 预处理器指令
  • 函数
  • 变量
  • 语句 & 表达式
  • 注释(这个看你需不需要注释)
  1. 再看一下一个简单的C程序长什么样
1
2
3
4
5
#include <stdio.h>
void main()
{
printf("Hello, World!");
}

它的作用很简单,就是在屏幕上输出Hello, World!

由于过于简单吗,我就不贴图片了(贴图片都更复杂)。

  1. 接下来我讲解一下上面这段程序:
    • 程序的第一行 #include <stdio.h> 是预处理器指令,告诉 C 编译器在实际编译之前要包含 stdio.h 文件。
    • void main() 是主函数,程序从这里开始执行。
    • printf(“…”) 是 C 中另一个可用的函数(它被包含在stdio.h 文件),会在屏幕上显示消息 “Hello, World!”。

C 基本语法·

C 的令牌(Tokens)·

C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。例如,下面的 C 语句包括五个令牌:

1
printf("Hello, World! \n");

这五个令牌分别是:

printf
(
"Hello, World! \n"
)
;

分号(😉·

在 C 程序中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束。(在某些函数运用中要特别注意,如:if函数、for循环函数…)

注释·

注释在某些方面看来,还是很重要的。当你共享代码时,方便别人阅读您的代码。
C 语言有两种注释方式:
1.单行注释

// 单行注释,双左斜杠 后全部为注释。

以 // 开始的单行注释,这种注释可以单独占一行。

2.多功能注释

/* 单行注释 */
/* 
多行注释
多行注释
多行注释
*/

/* */ 这种格式的注释可以单行或多行。
不能在注释内嵌套注释,注释也不能出现在字符串或字符值中。
如:

printf("//how do you do!\n");

printf("/*how do you do!*/\n);

输出分别是://how do you do!和 /*how do you do!*/

标识符·

标识符:在编程语言中,标识符是用户编程时使用的名字,变量、常量、函数、语句块都有名字。是用来标识某个实体的一个符号,是对变量名、函数名、标号和其他各种用户定义的对象命名。

C语言中标识符的命名规范:

  1. 标识符由字母、数字、下划线组成,并且首字母不能是数字。
  2. 不能把C的关键字作为用户的标识符,例如:if、for、while等。(注:标识符不能和C语言的关键字相同,也不能和用户自定义的函数或C语言库函数同名)
  3. 标识符长度是由机器上的编译系统决定的,一般的限制为8字符,(注:8字符长度限制是C89标准,C99标准已经扩充长度,其实大部分工业标准都更长)。
  4. 标识符对大小写敏感,即严格区分大小写。一般对变量名用小写,符号常量命名用大写。(注:C语言中字母是区分大小写的,因此score、Score、SCORE分别代表三个不同的标识符)
  5. 标识符命名应做到"见名知意",例如,长度(外语:length),求和、总计(外语:sum),圆周率(外语:pi)

C 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。
C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言。因此,在 C 中,Manpower 和 manpower 是两个不同的标识符。下面列出几个有效的标识符:

1 2 3 4 5
mohd zara abc move_name a_123
myname50 _temp j a23b9 retVal

关键字·

下表列出了 C 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。

关键字	 	说明
auto		声明自动变量
break		跳出当前循环
case		开关语句分支
char		声明字符型变量或函数返回值类型
const		声明只读变量
continue	结束当前循环,开始下一轮循环
default		开关语句中的"其它"分支
do			循环语句的循环体
double		声明双精度浮点型变量或函数返回值类型
else		条件语句否定分支(与 if 连用)
enum		声明枚举类型
extern		声明变量或函数是在其它文件或本文件的其他位置定义
float		声明浮点型变量或函数返回值类型
for			一种循环语句
goto		无条件跳转语句
if			条件语句
int			声明整型变量或函数
long		声明长整型变量或函数返回值类型
register	声明寄存器变量
return		子程序返回语句(可以带参数,也可不带参数)
short		声明短整型变量或函数
signed		声明有符号类型变量或函数
sizeof		计算数据类型或变量长度(即所占字节数)
static		声明静态变量
struct		声明结构体类型
switch		用于开关语句
typedef		用以给数据类型取别名
unsigned	声明无符号类型变量或函数
union		声明共用体类型
void		声明函数无返回值或无参数,声明无类型指针
volatile	说明变量在程序执行中可被隐含地改变
while		循环语句的循环条件
**C99 		新增关键字**
_Bool	
_Complex	
_Imaginary	
inline	
restrict
**C11 新增关键字**
_Alignas	
_Alignof	
_Atomic	
_Generic	
_Noreturn
_Static_assert	_Thread_local    

C 中的空格·

只包含空格的行,被称为空白行,可能带有注释,C 编译器会完全忽略它。
在 C 中,空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。因此,在下面的语句中:

int age;

在这里,int 和 age 之间必须至少有一个空格字符(通常是一个空白符),这样编译器才能够区分它们。另一方面,在下面的语句中:

fruit = apples + oranges;   // 获取水果的总数

fruit 和 =,或者 = 和 apples 之间的空格字符不是必需的,但是为了增强可读性,您可以根据需要适当增加一些空格。

C 函数·

准确的说,函数这个名称不太准确,容易误导人。C/C++里的函数应该被叫做__“子程序”__,是一个独立的程序段,可以被重复调用用来完成类似的功能

这样的“子程序”很多情况下是用来__提供一个值__的,这就是通常的函数,这个值的类型必须明确,就是返回值的类型。

但有的子程序不是用来提供一个值,可以仅仅是执行某些__特定的操作__,那么,定义为空类型是__安全的__,表示“不允许该子程序返回值”。这种子程序只能通过独立的语句调用,不能用在表达式里。

之所以需要空类型,是因为,函数的默认返回值类型是int,如果在函数定义时未带返回类型说明,则默认为int;即使函数中没有return语句,编译器按照函数返回值的原理,会返回一个__不确定的值__。如果将这样的函数错用在表达式里,语法上没错,但会带来很难察觉的逻辑错误。
而将空类型函数用在表达式里是一个编译错误。

为什么C语言程序运行闪一下就没有了(解决方法)·

  1. system(“pause”)
  2. getchar()
  3. getch()

C语言中system(“pause”)·

如果想要使用system(“pause”),就要先包含该函数的头文件stdlib.h(#include <stdlib.h>)
system就是调用从程序中调用系统命令(和shell命令)。
system(“pause”)就是从程序里调用“pause”命令;
而“pause”这个系统命令的功能很简单,意思是停下这个程序,然后等待按下一个按键后退出程序。会在命令行上输出一行类似于“Press any key to exit”的字,等待用户按一个键,然后返回。

getchar()·

getchar()函数的作用是从计算机终端(一般为键盘)输入一个字符。getchar()函数只能接收一个字符,其函数值就是从输入设备得到的字符。

getch()函数·

如果想要使用getch(); ,就要先包含该函数的头文件conio.h(#include <conio.h>)

getch()是编程中所用的函数,这个函数是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车,有的C语言命令行程序会用到此函数做游戏,但是这个函数并非标准函数,要注意移植性!

getchar()与getch()的区别:·

用getchar()时,在键盘上按一个字符后,要按回车才能读取进去;

用getch()时,要包含头文件<conio.h>,在键盘上按一个字符马上就被读取进去,不用按回车,因此可以作为“按任意键继续”的执行语句。

getch返回值是用户输入的ASCII码,出错返回-1,输入的字符不会回显在屏幕上。

getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行。