首先我们把所有的关键字进行分类:
这里是引用
数据类型关键字(12个):
char、short、int、long、signed、unsigned、float、double、struct、union、enum、void
char :声明字符型变量或函数
short :声明短整型变量或函数
int : 声明整型变量或函数
long :声明长整型变量或函数
signed :声明有符号类型变量或函数
unsigned :声明无符号类型变量或函数
float :声明浮点型变量或函数
double :声明双精度变量或函数
struct :声明结构体变量或函数
union :声明共用体(联合)数据类型
enum :声明枚举类型
void :声明函数无返回值或无参数,声明无类型指针
————————————————
这里是引用
控制语句关键字(12个)
在这里我们重点讲解几个关键字:typedef static register
这里补充一个知识点
变量的命名:
1.变量名不能是关键字。
2.名字必须是数字,下划线,字母组成的,不能有特殊字符,同时不能以字母开头
例如: int 2b (err) // int _2b (right)
typedef其含义就是:类型重命名
举例:
#include
typedef unsigned int uni;
int main()
{
unsigned int num1 = 0;
uni sum2 = 1;
printf("%d\n", sum2);
return 0;
}
运行如下:
这里的 unsigned int 与 uni 是等效的,因为有
typedef unsigned int uni;
static用来修饰变量和函数的
原本变量会在栈区去开辟空间,但修饰之后会将变量存储到静态区,改变的是变量的生命周期,并不是作用域,因为其在栈上开辟的空间在使用完会自动释放,而在静态区存储的变量相当于全局变量,会持续存在到程序执行完毕才释放变量所占的空间
举个例子:
#include
void test ()
{
int a = 1;
a++;
printf("%d", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
运行如下:
因为 a 为局部变量,所以在出作用域时就会销毁
因为static可以修饰局部变量,所以:
static int a = 1;
#include
void test ()
{
static int a = 1;
a++;
printf("%d", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
这次结果是什么呢?运行如下:
我们猜测变量 a 出作用域时没有被销毁,其一直被保留。
static修饰的变量,改变了变量的存储位置。
影响了变量的生命周期。
普通的局部变量存放在栈区,生命周期作用域。
static修饰的变量在静态区,生命周期 是整个程序。
这里是引用
static的两个重要作用:
1、修饰变量。变量又分为局部变量和全局变量,但它们都存在内存的静态区。
2、修饰函数。函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数是否会与其他文件中的函数同名。
注:在其他的文件中定义的变量,我们可以使用extern来声明此变量,供我们来使用,但是如果在其他文件中该变量被static定义了,我们就无法跨文件使用该变量了。
当我们写一个有关全局变量的代码:
只要加上 extern int n1就可以使用
但当我们加上static int n1 时,会运行失败。
y[因为static修饰全局变量时,这时这个全局变量的外部链接属性就变成了内部链接属性。其他源文件(.c)就不能再使用这个全局变量了。
这里是引用
使用:尽量将变量放入寄存器,从而达到提高运算效率。
补充知识:cpu是主要负责计算的硬件单元,但为了方便计算,一般第一步需要先把数据从内存读取到CPU内,那么就需要cpu也具有一定的数据储存能力,故现代cpu中形成了一套叫寄存器的硬件器。
原文链接
register会尽量将变量放入寄存器,从而达到提高运算效率。