C 语言是一种通用的、面向过程式的计算机程序设计语言。
当前最新的 C 语言标准为 C18 ,在它之前的 C 语言标准有 C17、C11...C99 等
Hello World:
#include <stdio.h> // stdio.h 是一个头文件 (标准输入输出头文件) , #include 是一个预处理命令,用来引入头文件。告诉 C 编译器在实际编译之前要包含 stdio.h 文件, 当编译器遇到 printf() 函数时,如果没有找到 stdio.h 头文件,会发生编译错误 int main() // 所有的 C 语言程序都需要包含 main() 函数。 代码从 main() 函数开始执行 { printf("Hello, World! \n"); // printf() 用于格式化输出到屏幕。printf() 函数在 "stdio.h" 头文件中声明 return 0; // 语句用于表示退出程序,终止 main() 函数,并返回值 0 }
编译&执行C程序:
①:打开一个文本编辑器,添加上述代码,并保存文件为hello.c
②:打开命令提示符,进入到保存文件所在的目录
③:输入 gcc hello.c,输入回车,编译代码
④:如果代码中没有错误,命令提示符会跳到下一行,并生成 a.out 可执行文件
⑤:执行 a.out ./a.out
1、基本语法
分号; 在 C 程序中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束
注释:// 单行注释 ,/* */ 这种格式的注释可以单行或多行
标识符:C 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。
C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言
空格:只包含空格的行,被称为空白行,可能带有注释,C 编译器会完全忽略它。
在 C 中,空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始
2、数据类型
C 中的类型可分为以下几种:
类型与描述 |
---|
基本类型: 它们是算术类型,包括两种类型:整数类型和浮点类型。 |
枚举类型: 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。 |
void 类型: 类型说明符 void 表明没有可用的值。 |
派生类型: 它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。 |
整数类型:
类型 | 存储大小 | 值范围 |
---|---|---|
char | 1 字节 | -128 到 127 或 0 到 255 |
unsigned char | 1 字节 | 0 到 255 |
signed char | 1 字节 | -128 到 127 |
int | 2 或 4 字节 | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int | 2 或 4 字节 | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2 字节 | -32,768 到 32,767 |
unsigned short | 2 字节 | 0 到 65,535 |
long | 4 字节 | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4 字节 | 0 到 4,294,967,295 |
浮点类型:
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float | 4 字节 | 1.2E-38 到 3.4E+38 | 6 位有效位 |
double | 8 字节 | 2.3E-308 到 1.7E+308 | 15 位有效位 |
long double | 16 字节 | 3.4E-4932 到 1.1E+4932 | 19 位有效位 |
void类型:
void 类型指定没有可用的值。它通常用于以下三种情况下:
类型与描述 |
---|
函数返回为空 C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status); |
函数参数为空 C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void); |
指针指向 void 类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。 |
强制类型转换:
强制类型转换是把变量从一种类型转换为另一种数据类型。
格式:(type_name) expression
3、变量
变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C 是大小写敏感的
声明和定义的区别:
一般体现在有没有对变量进行赋值,如果只是声明了一个变量,没有赋值,那就是声明;如果声明并赋值,那就是定义。
声明:不会开辟内存,仅仅告诉编译器,有声明的部分存在,要预留一点空间
定义:需要开辟内存
变量声明:type variable_list;
在这里,type 必须是一个有效的 C 数据类型,可以是 char、w_char、int、float、double 或任何用户自定义的对象,variable_list 可以由一个或多个标识符名称组成,多个标识符之间用逗号分隔。如:
int i, j, k; char c, ch; float f, salary; double d;
声明并初始化:
extern int d = 3, f = 5; // d 和 f 的声明与初始化 int d = 3, f = 5; // 定义并初始化 d 和 f byte z = 22; // 定义并初始化 z char x = 'x'; // 变量 x 的值为 'x'
C中的变量声明
变量声明向编译期保证变量以指定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。
变量只在编译时有它的意义,在程序连接时编译器需要实际的变量声明
变量的声明有两种情况:
①:一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间
②:另一种时不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。例如:extern int a 其中变量 a 可以在别的文件中定义的。
4、常量
常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。
常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
常量定义:
常量名应是大写字母。
在C中,有两种简单的定义常量的方式:
①:使用 #define 预处理器
语法:#define identifier value
如:#define LENGTH 10
②:使用 const 关键字
语法:const type variable = value;
#define LENGTH 10 #define WIDTH 5 #define NEWLINE '\n' const int LENGTH = 10; const int WIDTH = 5; const char NEWLINE = '\n';
5、存储类
存储类定义C程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。
C程序中可用的存储类:auto、register、static、extern
①:auto存储类
auto 存储类是所有局部变量默认的存储类。auto只能用在函数内,即auto只能修饰局部变量
{ int mount; auto int month; }
②:register存储类
register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个字),且不能对它应用一元的 '&' 运算符(因为它没有内存位置)
{ register int miles; }
寄存器只用于需要快速访问的变量,比如计数器。还应注意的是,定义 'register' 并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制。
③:static 存储类
static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值
static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
全局声明的一个 static 变量或方法可以被任何函数或方法调用,只要这些方法出现在跟 static 变量或方法同一个文件中。
④:extern 存储类
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 extern 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置
当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数
extern 修饰符通常用于当有两个或多个文件共享相同的全局变量或函数的时候
6、运算符
杂项运算符 ↦ sizeof & 三元
运算符 | 描述 | 实例 |
---|---|---|
sizeof() | 返回变量的大小。 | sizeof(a) 将返回 4,其中 a 是整数。 |
& | 返回变量的地址。 | &a; 将给出变量的实际地址。 |
* | 指向一个变量。 | *a; 将指向一个变量。 |
? : | 条件表达式 | 如果条件为真 ? 则值为 X : 否则值为 Y |
7、判断
判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。
C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false 。
判断语句:if、if...else、swith
? : 三元运算符
8、循环
有的时候,我们可能需要多次执行同一块代码
循环类型:while循环、for循环、do...while循环
// for循环 for ( init; condition; increment ) { statement(s); } // 无线循环,可以按 Ctrl + C 键终止一个无限循环 for( ; ; ) { printf("该循环会永远执行下去!\n"); } // while循环 while(condition) { statement(s); } // do while do{ statement(s); }while( condition );
循环控制语句:
循环控制语句改变你代码的执行顺序。通过它你可以实现代码的跳转。
控制语句 | 描述 |
---|---|
break 语句 | 终止循环或 switch 语句,程序流将继续执行紧接着循环或 switch 的下一条语句。 |
continue 语句 | 告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。 |
goto 语句 | 将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。 |
END.