1、C程序结构:
1 #include 2 3 int main()4 {5 printf("hello world!\n");6 return 0 7 }
C程序主要包括几部分
预处理指令
函数
变量
语句或表达式
注释
2、C基本语法
C程序由各种令牌组成(关键字、标识符、常量、字符串值、符号)
(1)分号
(2)注释
(3)标识符
(4)关键字
关键字 | 说明 |
---|---|
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 | 循环语句的循环条件 |
3、数据类型:
在C语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。
变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
C语言有4种数据类型:
(1)基本类型:
算术类型(整数类型、浮点类型)
(2)枚举类型:
算术类型(被用来定义在程序中只能赋予其一定的离散整数值的变量)
(3)void类型:
(4)派生类型:
指针类型、数组类型、结构类型、共用体类型和函数类型
PS:数组类型和结构类型统称聚合类型,函数类型指的是函数返回值的类型。
(5)整数类型+浮点类型:
关于标准整数类型的存储大小和值范围的细节:
类型 | 存储大小 | 值范围 |
---|---|---|
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 字节 | 到 3.4E+38 | 6 位小数 |
double | 8 字节 | 到 1.7E+308 | 15 位小数 |
long double | 16 字节 | 到 1.1E+4932 | 19 位小数 |
void 类型指定没有可用的值。它通常用于以下三种情况下:
序号 | 类型与描述 |
---|---|
1 | 函数返回为空 C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status); |
2 | 函数参数为空 C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void); |
3 | 指针指向 void 类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。 |
4、变量:
(1)概念:
变量是程序可操作的存储空间的名称。
C中每个变量都有其特定类型,类决定了变量存储的大小和布局(指定范围内的值都可以存储到内存中,运算符作用变量上)
变量的名称可以由字母、数字和下划线字符组成。 它必须以字母或下划线开头。 大写字母和小写字母是不同的, C 是大小写敏感的。
(2)变量类型:
char(一个字节,整数类型)、int、float(单精度浮点值)、double(双精度浮点值)、void(类型缺失)
C语言中也允许定义各种其他类型的变量,如枚举、指针、数组、结构、共用体等。
(3)声明-->初始化
1)声明:
变量声明向编译器保证变量以指定类型和名称存在。
变量声明有两种情况:
A:需要建立存储空间。如int a
B:不需要建立存储空间,通过使用extern关键字声明变量名。extern int a
2)初始化:
5、常量:
1)常量可以是任何基本数据类型:整数常量、浮点常量、字符常量、字符串字面值,枚举常量。
2)字符常量:
转义序列 | 含义 |
---|---|
\\ | \ 字符 |
\' | ' 字符 |
\" | " 字符 |
\? | ? 字符 |
\a | 警报铃声 |
\b | 退格键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ooo | 一到三位的八进制数 |
\xhh . . . | 一个或多个数字的十六进制数 |
3)定义常量:
在C中,有两种简单的定义常量的方式:
#define
const
1 #include 2 3 #define A 104 5 int main()6 {7 const int a = 10;8 printf("%d\n",A);9 print("a\n",a); 10 return 0; 11 12 }
6、存储类:
(1)概念
存储类定义C程序中变量或函数的范围和生命周期。
这些说明符放置在它们所修饰的类型之前。
C程序中可用的存储类:
auto\register\static\extern
(2)介绍:
1)auto:是所有局部变量默认的存储类
1 { 2 int mount; 3 auto int month;//auto只能用在函数内,即只能修饰局部变量 4 }
2)register:用于定义存储在寄存器中而不是RAM中的局部变量。该变量的最大值等于寄存器的大小。不能对其进行一元&运算(没有内存位置)
1 { 2 register int miles;//寄存器只用有于需要快速访问的变量 3 }
3)static:
A:stati存储类指示编译器在程序的声明周期内保持局部变量的存在,
而不需要在每次它进入和离开作用域时进行创建和销毁,
故使用static修饰局部变量时可以在函数调用之间保持局部变量的值。
B:static也可应用在全局变量。当修饰全部变量时,会使变量的作用域限制在声明它的文件内。
全局声明一个static变量或方法可以被任何函数或方法调用,只要这些方法出现跟static变量或方法同一个文件。
C:
1 #include 2 3 void func1(void);4 static int count=10;5 int main()6 {7 while(count)8 {9 func1(); 10 } 11 return 0; 12 } 13 void func1(void) 14 { 15 static int thingy=5; 16 thingy++; 17 printf("thingy is %d,count is %d\n",thingy,count); 18 } 19 ~
4)extern:
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。
当使用extern时,对于无法初始化的变量,会把变量名指向以恶搞之前定义过的存储位置。
当有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用extern来得到已定义的变量或函数的引用。
即extern是用来在另一个文件中声明一个全局变量或函数。
extern修饰符通常用于当有两个或多个文件共享相同的全局变量或函数时候。
7、运算符:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、杂项运算符
(1)算术运算符:
运算符 | 描述 | 实例 |
---|---|---|
+ | 把两个操作数相加 | A + B 将得到 30 |
- | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 |
* | 把两个操作数相乘 | A * B 将得到 200 |
/ | 分子除以分母 | B / A 将得到 2 |
% | 取模运算符,整除后的余数 | B % A 将得到 0 |
++ | 自增运算符,整数值增加 1 | A++ 将得到 11 |
-- | 自减运算符,整数值减少 1 | A-- 将得到 9 |
(2)关系运算符:
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 不为真。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) 不为真。 |
= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) 不为真。 |
从左到右 | ||
关系 | = | 从左到右 |
相等 | == != | 从左到右 |
位与 AND | & | 从左到右 |
位异或 XOR | ^ | 从左到右 |
位或 OR | | | 从左到右 |
逻辑与 AND | && | 从左到右 |
逻辑或 OR | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %=>>=
|