C语言
1. 第一个C语言程序
#include <stdio.h>
int main()
{
printf("Hello World");
return 0;
}
下面是对这段程序的讲解:
#include <stdio.h>
是预处理命令,表示在预处理阶段要把stdio.h
这个文件包含到这段程序中;int main()
是程序的主入口,程序从这里开始运行;printf("Hello World")
表示在屏幕中打印Hello World
,printf()
是一个函数,这个函数的功能是把自定义的内容打印到屏幕中;return 0;
表示终止main()
函数,并且返回一个为0的值。
2. 基本语法
2.1 分号;
在C语言程序中;
号是语句的结束结束符,每个语句的结尾必须要以;
结尾。
printf("Hello World");
return 0;
2.2 注释
注释是给程序员自己查看的,是一种标识,一般是用来对代码的解析和说明
注释在C程序中有两种表示方式:
//
表示单行注释;/**/
表示单行注释和多行注释。
//这是单行注释
/*这是单行注释,也可多行注释*/
/*
这里是
多行注释
*/
注释在代码的预处理阶段时,会把注释删除,所有机器是不会识别到注释的。
2.3 标识符
C 语言标识符的作用是用来标识变量、函数或任何其他自定义项目的名称
- 标识符可以由字母A-Z或a-z、数字0-9、下划线_组成;
- 标识符首字符不能是数字;
- 标识符区分大小写,Test和test代表的是两个标识符;
- 不能使用C语言中的关键字和保留标识符。
2.4 关键字
关键字也被叫做保留字,关键字不能被用作常量名、变量名或其它标识符
下表列出了一些关键字
关键字 | 说明 |
---|---|
auto | 声明自动变量 |
break | 跳出当前循环 |
case | 开关语句分支 |
char | 声明字符型变量或函数返回值类型 |
const | 定义常量,如果一个变量被 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. 数据类型
类型 | 备注 | 长度 |
---|---|---|
char | 字符类型 | 1 |
short | 短整型 | 2 |
int | 整型 | 4 |
long | 长整型 | 4 |
long long | 更长的整型 | 8 |
float | 单精度浮点型 | 4 |
double | 双精度浮点型 | 8 |
long double | 更长的双精度浮点数 | 8 |
由于某些平台的配置会有差别,为了得到某个类型在某个特定的平台的具体大小,可以使用sizeof()
运算符来查看类型的大小。
#include <stdio.h>
int main()
{
printf("char类型的大小为:%d\n", sizeof(char));
printf("short类型的大小为:%d\n", sizeof(short));
printf("int类型的大小为:%d\n", sizeof(int));
printf("long类型的大小为:%d\n", sizeof(long));
printf("long long类型的大小为:%d\n", sizeof(long long));
printf("float类型的大小为:%d\n", sizeof(float));
printf("double类型的大小为:%d\n", sizeof(double));
printf("long double类型的大小为:%d\n", sizeof(long double));
return 0;
}
运行后得到下面结果
char类型的大小为:1
short类型的大小为:2
int类型的大小为:4
long类型的大小为:4
long long类型的大小为:8
float类型的大小为:4
double类型的大小为:8
long double类型的大小为:8
4. 变量
4.1 变量的定义
变量的定义指的是告诉编译器我需要创建一个某个数据类型的存储空间
变量定义的格式数据类型 标识符;
int main()
{
//定义一个变量
char a;
int b;
//定义多个变量
char x, y;
int i, j;
return 0;
}
在定义变量的时候可以对其进行初始化,初始化指的是为变量赋予一个初始值
int main()
{
//定义一个变量,并初始化
char a = 'a';
int b = 1;
//定义多个变量,并初始化
char x = 'a', y = 'b';
int i = 1, b = 2;
return 0;
}
创建变量时,推荐在创建变量后对其进行初始化。
4.2 变量的声明
变量的声明分两种:
-
需要建立存储空间的
int main() { //这种方式其实就是变量的定义 int a;//表示声明且定义变量a int b = 0;//表示声明且定义变量b,并对其进行初始化,值为0 return 0; }
-
不需要建立存储空间的
//函数外声明并定义全局变量x,y int x; int y; int main() { //声明变量x,y extern int x; //给变量x,y赋值 x = 1; //extern int y = 2;//错误写法,在函数内不能同时extern和初始化,需要分开 return 0; }
在同一个文件内对全局变量进行声明的用法很少使用,一般都是在使用不同文件中的全局变量时进行变量声明的
add.c文件
//另一个文件中定义并且初始化的全局变量 int g_val = 1;
test.c文件
//声明变量 extern g_val; int main() { //打印变量 printf("%d", g_val); //结果为 1 return 0; }
4.2 变量的分类
4.2.1 局部变量
我们把定义在{}
内的变量称为局部变量
int main()
{
//变量a定义在{}内,称为局部变量
int a = 0;
return 0;
}
4.2.2 全局变量
我们把定义在{}
外的变量称为全局变量
//变量a定义在{}外,称为全局变量
int a = 0;
int main()
{
return 0;
}
当全局变量和局部变量名字重复时会怎么样呢?
int main()
{
int a = 1;
//这里表示把变量a的值打印到屏幕上
printf("%d", a);// 结果为 1
return 0;
}
总结:
在全局变量和局部变量重名时,会优先使用局部变量
但在写代码是不推荐这样做
4.3 变量的作用域
作用域:
作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
局部变量的作用域:就是变量所在的局部范围,也就是{}内
全局变量的作用域:整个工程
test.c文件
//声明一下变量,当全局变量在同一个项目,不同的文件中时需要使用extern声明
extern int g_val;
int main()
{
//全局变量的作用域是整个工程
printf("g_val = %d\n", g_val); //结果为 g_val = 1
{
//局部变量的作用域在变量所在的{}内
int a = 10;
printf("a = %d\n", a);//结果为 a = 10
}
//printf("a = %d\n", a); //错误,已经超过了a的作用域
return 0;
}
add.c文件
int g_val = 2022;//全局变量
4.3 变量的生命周期
**变量的生命周期:**变量的创建和销毁之间的时间段
局部变量的生命周期:进入局部范围生命开始,出局部范围生命结束
全局变量的生命周期:程序的生命周期
5. 常量
常量是固定的值,在程序运行的过程中不可以改变,这些值也可以称为字面量
5.1 整数常量
整数常量可以用十进制、八进制、十六进制来表示
可以使用前缀来表示整数常量的进制,不加前缀表示十进制,前缀0
表示八进制,0x或0X
前缀表示十六进制
整数常量也可以加上后缀,后缀L或l
表示这个是长整数型整数变量
int main()
{
2022; //十进制整数变量
066; //八进制整数变量
078; //错误写法,前缀0代表八进制,但八进制数字不存在八
0x6f; //十六进制整数变量
8899l;//长整数型整数变量
return 0;
}
5.2 浮点常量
浮点常量可由符号整数部分、小数部分、E指数部分组成
小数形式是由数字和小数点组成的,小数点不可省略,小数点前后数字可以省略其一
指数形式就是数学中的科学计数法,以E或e
后跟一个整数来表示以10为底数的幂数,E或e
前可以是整数也可以是小数,e”或“E”后必须是正整数或符整数
int main()
{
//小数形式
3.14;
.14;
3.;
//指数形式
314e-2;
3.14e2;
return 0;
}
5.3 字符常量
字符常量在C语言中用''
两个单引号括起来
int main()
{
'a';//表示一个字符常量
return 0;
}
5.3.1 转义字符
在一些特定的字符,在他们前面加上反斜杠\
时,会被赋予特殊的含义
例如:打印\t
时,会在屏幕上打印一个制表符,也就是键盘上的TAB
键的效果
下表是常用的转义字符
转义序列 | 含义 |
---|---|
\\ | \ 字符 |
\’ | ’ 字符 |
\" | " 字符 |
\? | ? 字符 |
\a | 警报铃声 |
\b | 退格键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | 一到三位的八进制数 |
\xdd . . . | 一个或多个数字的十六进制数 |
5.4 字符串常量
字符串常量在C语言中用""
两个双引号括起来,里面包含一个或多个类似于字符常量的字符
int main()
{
"Hello World";
"haha";
return 0;
}
5.5 自定义常量
5.5.1 const 修饰的常变量
在定义变量的前面使用const
修饰,使其不可变
格式:const 数据类型 标识符 = 值;
int main()
{
//const 修饰的常变量
const int a = 666;
//不可以使用下面的形式定义一个常变量,必须在一个语句内完成定义和初始化
//const int b;
//b = 888;
return 0;
}
注:上面实例的
a
被称为被const
修饰的常变量,const
修饰的常变量在C语言中只是在语法层面上限制a
的值不可改变,都是本质上a
还是个变量,所有我们把它叫做常变量
5.5.2 #define 定义的标识符常量
下面是#define
定义的标识符常量的格式
#define 标识符 值
//使用#define定义的标识符常量
#define MAX 100
int main()
{
printf("%d", MAX);
return 0;
}
本文出现任何错误,欢迎留言批评指正。