初识C的第四课

目录

关键词

1.常见的关键词及其分类

(1)类型

(2)循环

(3)选择分支

(4)其他

2.关键词register

3.关键词typedef

4.关键词static

(1)修饰局部变量

(2)修饰全局变量

(3)修饰函数

#define定义常量和宏

1.#define定义常量

2.#define定义宏

总结


关键词

1.常见的关键词及其分类

c语言中提供了丰富的关键词,这些关键词都是事先设定好的,用户是不能自己创造的

(1)类型

char

int

short

long

float

double

signed

unsigned

static

void

const

enum

union

struct

typedef

简单说一下  auto

这个是自动的意思,我们们在使用局部变量的时候,有这样一个特点,局部变量都是自动创建自动销毁的,所以局部变量也叫做自动变量,只不过后来由于局部变量都是auto 类型的,后来没有人这样写了

#include<stdio.h>
int main()
{
	{
		auto int a;
	}
	return 0;
}

(2)循环

break       打破循环时候使用(也可在switch选择语句中使用)

continue   终结本次循环,执行下一轮循环

do

while

fo

(3)选择分支

if

else

switch

case

break

default

goto

(4)其他

extern         声明外部符号

register       寄存器

return          函数返回

sizeof          计算所占内存大小

volatile        后面详细讲

2.关键词register

register是寄存器的意思

这里先给大家普及内存相关知识

 这样下来,也就是越往上,它的速度越快,当然造价也很高,空间也会越小。

到底这个寄存器的关键字怎么用

#include<stdio.h>
int main()
{
	register int a = 10;
	return 0;
}

这里加上后,就是把a放到寄存器里面,具体是否放在寄存器中取决于编译器,当然,我们如今的编译器已经是相当聪明了,他在编译的时候就会考虑到这个是否该放在寄存器中,使我们的效率大幅度提高。

3.关键词typedef

typedef顾名思义是类型定义,这里应该理解为类型重命名

typedef unsigned int uint;
#include<stdio.h>
int main()
{
	unsigned int a = 10;
	uint b = 5;
	return 0;
}

这段代码中使用typedef对unsigned int重定义成uint,这时候,unsigned和uint是同一种类型,这样的好处是可以简化一些复杂的类型,上面代码中a和b的类型就是相同的。

4.关键词static

修饰局部变量

修饰全局变量

修饰函数

(1)修饰局部变量

void test()
{
	int a = 0;
	a++;
	printf("%d\n", a);
}
#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 0; i < 10; i++) {
		test();
	}
	return 0;
}

运行结果是十个   1

void test()
{
	static int a = 0;
	a++;
	printf("%d\n", a);
}
#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 0; i < 10; i++) {
		test();
	}
	return 0;
}

加上static后,结果是 1-10

不同的原因,加上static

普通的局部变量是放在栈区的,这种局部变量进入作用域创建,出来作用域销毁

但是局部变量被static修饰后,变量就放在了静态区,静态区是直到程序结束销毁

本质上:是static修饰改变了局部变量的存储位置,所以结果不一样。

但是不会影响作用域!!!生命周期发生了变化。

 这里就是我们内存的分区

栈区上的就是进了作用域创建,出作用域销毁

静态区就是数据创建到程序结束才销毁

所以我们给局部变量加上这个static后,使其从栈区变道了静态区。

(2)修饰全局变量

我们知道全局变量有两种,一种是同一个源文件里,另一个是两个源文件里,用extern引用

 在两个源文件里,用extern来调用,我们加上static来看一下

 发生了错误,原因就是我们加上了static。

全局变量本身是具有外部链接属性的

再A文件定义的变量,再B文件也可以通过链接使用

但是全局变量被static修饰,这个外部链接属性变成了内部链接属性,作用域变小了

这个全局变量就只能在自己的源文件里使用了,不能在第二个源文件声明调用了

(3)修饰函数

函数跟全局变量是一个道理

 两个源文件,调用函数就可以正常使用,也是用extern来调用,加上static试试

 同样的效果,也是出现报错,原因是加上了static

函数本身是具有外部链接属性的

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

使得这个函数只能子啊自己所在的源文件内部使用,其他源文件无法使用

 注:与全局变量不同的是,函数没有生命周期,他一直都在,只不过是能不能调到的问题

#define定义常量和宏

1.#define定义常量

前面常量的时候已经讲过

#define M 100
#include<stdio.h>
int main()
{
	printf("%d", M);
	return 0;
}

2.#define定义宏

#define MAX(x,y)  (x>y?x:y)  //求最大值      定义宏,没有类型,内容放在后面
#define ADD(x,y)  ((x)+(y))  //求两数和      定义宏,跟函数很想,下面引用直接也是替换
//      宏的名字  参数   宏体        处理简单的逻辑
int main()
{
	int a = 10;
	int b = 20;

	int m = MAX(a, b);
	//int m = (a > b ? a : b);  引用宏之后的相当于

	printf("%d\n", m);

	return 0;
}

与函数非常的相似,这段代码就是把MAX(a,b)替换为(x>y?x:y)这也是一种替换,只不过这种是可以传一个参数的,将a传入x,b传入y,然后最终替换为(a>b?a:b)

函数用于比较复杂的关系中,宏用于相对不特别的复杂的关系中。

总结

本节主要讲了几个常见的关键词,以及#define定义常量与宏,如果本节内容对你有帮助的化,不要忘记留下你免费的赞赞和关注哦!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值