2.常见关键字
在c语言中提供了丰富的关键字,这些关键字是语言本身预先设定好的,用户自己是不能创建关键字的。
关键字:auto,break,continue,for,while,do,char,short,int,long,float,double,signed(有符号),unsigned(无符号),switch,case,default,goto,if,else,default,enum(枚举),struct(结构体),union(联合体),const(常属性),extern(声明外部符号),register(寄存器),static(静态的),return(函数返回值),sizeof(计算大小),typedef(类型重命名),void(无),volatile。
注:在变量命名时要保证有意义,变量名字不能是关键字,且名字必须是字母,数字,下划线组成,不能有特殊字符,同时不能以数字开头。
(1)关键字typedef
定义:类型定义,可以理解为类型重命名。
#include<stdio.h>
typedef unsigned int att; //int 表示有符号整数,可以表示正数、负数和零。unsigned int 表示无符号整数,只能表示非负数(即正数和零)。
int main()
{
unsigned int num = 2; //两种变量的类型是一样的
att num1 = 3;
printf("%d\n",num);
printf("%d\n",num1);
return 0;
}
(2)关键字static
定义:static是用来修饰变量和函数的。
1)修饰局部变量-称为静态局部变量
#include<stdio.h>
void tesr() //void的意思是不需要任何返回
{
int a = 1;
a++;
printf("%d\t",a);
}
int main()
{
int i = 0;
while(i < 10)
{
tesr();
i++;
}
return 0;
} //此时打印的结果为2 2 2 2 2 2 2 2 2 2
void tesr() //void的意思是不需要任何返回
{
static int a = 1;
a++;
printf("%d\t",a);
}
int main()
{
int i = 0;
while(i < 10)
{
tesr();
i++;
}
return 0;
} //此时打印的结果为2 3 4 5 6 7 8 9 10 11
注:static修饰局部变量的时候,局部变量出了作用域,不用销毁(本质上static修饰局部变量的时候改变了变量的存储位置)。
内存在使用的时候经常会划分区域,如图所示:
栈区内变量的生命周期通常是进作用域创建出作用域销毁,而静态区内变量的生命周期通常是进作用于创建程序结束的时候才会销毁,加上static的局部变量将生命周期变的和程序的生命周期一样长。
2)修饰全局变量-称为静态全局变量
注:当引用外部全局变量时用extern声明一下,即可正常使用,这也就是说全局变量有外部链接属性。
注:当全局变量用static修饰后,全局变量的外部链接属性就变成了内部链接属性,其他的源文件(.c)就不能在使用了。
3)修饰函数-称为静态函数
函数的使用情况和全局函数一样,也具有外部连接属性,当用static修饰的时候外部链接属性变成了内部链接属性,其他的源文件(.c)就不能在使用了。
例子:
无static修饰的
有static修饰的
(3)关键字register
register是寄存器,电脑上的存储设备通常有硬盘,内存,高速缓存,寄存器(集成到CPU上),越往后的空间越小,造价越高,但是计算速度越快。
#include<stdio.h>
int main()
{
register int num = 10; //register的作用是建议把3存放在寄存器中
return 0;
}
(4)#define定义常量和宏
1)定义常量
#include<stdio.h>
#define MAX 100
int main()
{
int a = 0;
scanf("%d",&a);
if(a<MAX)
printf("可行");
else
printf("输入有误");
return 0;
}
2)定义宏
#include<stdio.h>
#define Add(x,y) ((x)+(y))
int main()
{
int a = 10;
int b = 30;
int c = Add( a, b);
printf("%d",c);
return 0;
}
以下#define定义的方式称为宏。