初识C语言八

(11)常见关键字

C语言内制定的关键字可以直接拿来用

有:

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
这里简单介绍一下:
auto——自动
如:已知int a=10;中a是局部变量,且作用域在代码块内,又因出代码块后a就不起作用了;又因
这个a是自动创建自动销毁,所以我们也把这个a叫作自动变量。
局部变量也叫自动变量。
所以,这里我们知道在int前会 默认隐藏掉auto
得出:在局部变量前面都有一个auto,但会默认省略掉auto,所以C语言有一个auto的关键字,但
通常会把它省略掉。
break在C语言中的两个地方会用到:
1、在循环语句中break可以停止循环;
2、在swith case语句中会用到。
扩展知识点:
关键字不能跟变量相冲突。
char——字符类型
const——常变量
continue——继续(在循环里运用)
default——默认
do——do while循环
double——double类型
else——if else语句
enum——枚举
extern——引入外部符号
float——单精度浮点数
for——for循环
goto——goto语句
if——if语句
int——整形
long——长整形
register——寄存器
什么是寄存器?
首先,要知道计算机一般把存储数据存到这几个地方——
1、硬盘         2、内存        3、寄存器      4、高速缓存
内存的访问速度高于硬盘;高速缓存在访问速度高于内存;寄存器访问速度高于高速缓存。
访问速度越快,造价越高,所占空间大小越小。
在计算机要进行一系列运算的时候,首先要从 内存里面拿出数据到CPU(中央处理器)进行运算
在早期计算机出现时,内存的访问速度和CPU处理数据的数据搭配( 内存能拿多快,CPU就处理
多快);
后来随着计算机的发展,CPU处理数据的速度越来越快,但是内存访问速度却跟不上;
这时发现就算CPU处理数据再快,但内存访问速度跟不上的话,整体计算机处理速度也跟不上。
这时,有人提出在计算机里面加入更快设备;这时,高速缓存、寄存器就诞生了。
未来,CPU处理的数据从寄存器中拿;这样访问速度更快了。
但又因寄存器没有数据,这时要先拿内存中的数据放到高速缓存中,然后高速缓存再把数据放到
寄存器中去。
如果CPU还是没从寄存器中访问到数据的话,就再向下一级访问;这样,计算机整体速度就上去了
这就是计算机存储体系的原因。
那既然寄存器的访问速度很快的话,那我们去写代码时,如果int a=10;中10会频繁大量使用,这样
每次访问a的时候,都要去内存中去拿,这样速度会比较慢。
那如果想要把a放到寄存器里面去,要怎么放呢?
C语言中给出这样的解决方案——register int a=10;(建议把a定义成寄存器变量)
因寄存器存放空间大小有限,如果编译重要代码时都放到寄存器中,会发生问题——
这时,register这个关键字仅仅是建议,但最终是否放到寄存器里面去取决于编译器的判断。
return——返回
short——短整型
signed——有符号
unsigned——无符号
简单介绍后两个:
我们知道int a可以是正数或负数,如果int a=10;或int a=-2;这里int定义的变量是 有符号的
这时int前应加上signed,即:signed int,只是这里我们把signed省略掉了。

当然,我们 既然能定义有符号数字,那我们也可以定义无符号数字。
无符号数字的类型是:unsigned int——如:unsigned int sum=0;这里num被称为无符号数。
【注:如果一个数字没有符号位的话,那这个数字不存在正负之分,永远都是正数;即使放了负数,但在num看来也是正数。】

sizeof——用来计算大小的
static——静态的
struct——结构体关键字
switch——switch case语句
typedef——类型定义
union——联合体
void——无或空
volatile(后期讲操作系统时会介绍到,这个关键字是体现C语言段位的关键字)
while——while循环
【注:关键字不能跟变量相冲突,且要记忆关键字】

关键字typedef

typedef指类型定义,这里应该理解为类型重命名。
如:
unsigned int num=20;——无符号整形num
这里unsigned int num写代码时感觉过长了;这时,用到typedef——可以把unsigned int重新起个
名字,叫u_int
这时——unsigned int num=20;与u_int num=20;一样
u_int=unsigned int,相当于一个别名。(其他用途后期讲)

关键字static

在C语言中,static是用来修饰变量和函数的。
1、修饰局部变量——静态局部变量
2、修饰全局变量——静态全局变量
3、修饰函数——静态函数
当static修饰局部变量时,局部变量的生命周期延长了。
当static修饰全局变量时,改变了变量的作用域。
当static修饰函数时,改变了函数的链接属性。(类似作用域)
如:
void test(){
             int a=1;
             a++;
             printf("a=%d\n",a);
}
int main(){
            int i=0;
            while(i<5){
                        test();
                        i++;
                      }
            return 0;
}

打印结果为5个a=2;(具体原因,自行理解)

如果我们将这代码修改一下,把int a=1;改为——static int a=1;(这时a是一个静态的局部变量了)

这时,打印结果为a=2;a=3;a=4;a=5;a=6;(这里发现a++累计下来了,a不销毁了,保留了上一个值)

【注:static修饰全局变量是让静态的全局变量只能在自己所在的源文件内部使用】

extern关键字是用来声明外部符号的

比如:

我在第一个源文件test.c中编写——

int main(){

                   extern int g_val;

                    printf("g_val=%d\n",g_val);

                    return 0;

}

这时,我在第二源文件add.c中编写——

int g_val=2020;

因为有extern关键字用来声明外部符号,所以可以运行(之前有讲过)

但若我们这时加上static——static int g_val=2020;(这时就会出现错误了)

【注:全局变量只要在其他源文件内部进行外部声明,可以完全很好地使用。】

函数也类似

add.c源文件
int Add(int x,int y){
                       int z=x+y;
                       return z;
}

声明外部函数——

test.c源文件
extern int Add(int,int);
int main(){
              int a=10;
              int b=20;
              int sum=Add(a,b);
              printf("sum=%d\n",sum);
              return 0;
}

这时,如果加上static——static int Add(int x,inty)就会报错。

 

普通函数是有外部链接属性的,外部的其他源文件要想使用,声明一下就可以使用;

但被static修饰后,外部链接属性就变成内部链接属性了。

(12)#define定义常量和宏

define定义标识符常量

如:#define MAX 100——是指定义MAX的值为100

这样以后再写代码时,遇到MAX会认作100

#define MAX 100

int main(){

                  int a=MAX;

                  return 0;

}

打印结果为100

#define可以定义宏——“宏”是带参数的

如:比较大小时可以用函数的方法,也可以用“宏的方式”。

#define MAX(x,y)(x>y?x:y)

这里max=MAX(a,b)可以理解为max=(a>b?a:b)

(后期详讲)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值