1. 常见的关键字
auto break case char const continue default do double else enum
extern float for goto if int long register return short signed
sizeof static struct switch typedef union unsigned void volatile
while
2. 分类
(1)循环语句:
for,do...while,while,continue(只能用在循环,不可以用在switch),break
(2)选择语句:
if...else,swtich...case...default(+使用break),goto
(3)数据类型:
short,int,char,long,float,double,signed(有符号),unsigned(无符号),enume,struct,union,void
(4)const:常属性(修饰变量)
(5)define:定义常量、宏
-
定义常量
#include<stdio.h>
#define NUM 100
int main()
{
printf("%d\n",NUM); //===> 100
int a = NUM;
printf("%d\n",a); //===> 100
return 0;
}
-
定义宏
// 格式:
#define 宏名(宏的参数) 宏的内容
# define ADD(x+y) ((x)+(y))
(6)auto: 自动
所有局部变量前都有 auto,只是被隐藏了
#include<stdio.h>
int main()
{
auto int a = 10;//自动变量,即进主函数自动创建 a,执行到return 0后出主函数自动销毁 a
return 0;
}
(7)extern:声明外部符号
(8)typedef:类型重命名(将类型名称进行重命名)
#include<stdio.h>
typedf unsigned int uint;//对 unsigned 进行重新命名,命名为uint
int main()
{
unsigned int num1 = 0; //无符号型
uint num2 = 1;//无符号型
return 0;
}
-
typedef关键字 与 struct关键字的连用
(9)static:静态 (数据存放于内存的静态区)
-
static 修饰局部变量,称为静态局部变量
静态局部变量在函数调用结束后并不会被销毁,而是会保留其值,直到下次函数调用时继续使用。这意味着静态局部变量的生命周期是整个程序的执行时间,而不仅仅是它所在的函数。静态局部变量在程序执行到该对象的声明处时被首次初始化,之后的函数调用不再进行初始化。如果没有显式初始化,它会被程序自动初始化为0。本质上,static修饰局部变量的时候,改变了该变量的存储位置
#include<stdio.h>
void test() {
static int a = 1;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
while (i < 10){
test();
i++;}
return 0;
}
-
static 修饰全局变量,称为静态全局变量
全局变量本身具有
外部链接属性
但,若
static修饰全局变量,则该全局变量的外部链接属性就会变成
內部链接属性。静态全局变量的
作用域被限制在声明它的文件内,也就是说,它只能在声明它的源文件中被访问,而不能被其他源文件访问——
作用域变小。这有助于避免不同源文件之间的命名冲突。
-
static 修饰函数,称为静态函数
静态函数的作用域也
被限制
在声明它的源文件中,不能被其他源文件中的函数调用。
静态函数可以隐藏在其他源文件中具有相同名称的非静态函数之后,从而避免函数名冲并且突,静态函数还可以提高代码的封装性和可维护性
(10)break:停止(用于跳出循环)
(11)continue:停止(但不跳出循环)
(12)enum:枚举
(13)struct:结构体
(14)union:联合体(共用体)
(15)goto:实现跳转(与选择条件语句相似)
(16)return:返回
(17)sizeof:计算所占内存大小(字节)
(18)void: 空类型,无(函数的返回类型,函数的参数)
#include<stdio.h>
void test()
{
printf("hello world\n");//无类型,无返回值,return
}
int main()
{
return 0;//有返回值
}
(19)register:寄存器
#include<stdio.h>
int main()
{
register int num = 3; //建议:把 3 存放到寄存器中,决定权仍然在编译器中
return 0;
}