【C语言跬步积累】——关键字(1)(typedef、static)

目录

前言:

实例:

 常见关键字:

一.typedef

1.定义

 2.使用

3.实例

 二.static

 1.定义

2.作用

(一)修饰局部变量

实例(未使用static进行修饰):

调试过程:

实例(使用static进行修饰):

调试过程:

小结:

(二).修饰全局变量

实例(为使用static进行修饰):

实例(使用static进行修饰):

 (三).修饰函数(和修饰全局变量差不多)

实例:


 

前言:

关键字是不能和变量名冲突的 

实例:

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

该代码就是错误的,float是关键字,不能作为变量名来使用

 常见关键字:

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        

暂时先介绍下面几个,后续会有补充,另外关键字不建议背下来,之后自己敲代码敲多了就记得了,现在了解一下就行 

一.typedef

1.定义

typedef顾名思义是类型定义,可以理解为类型重命名

 2.使用

有些类型比较长,打字比较麻烦,就可以使用typedef将该类型重新取个名字,方便后续的使用

3.实例

#include<stdio.h>
int main()
{
typedef unsigned int u_int;//unsigned int是无符号的整型类型
u_int num1 = 66;
unsigned int num2 = 88;
return 0;
}

解释: 

 这里我们将比较长的unsignded int通过typedef重新命名为u_int,使得后续使用时更加方便,num1和num2的类型是相同的,u_int只是unsignded int的别名。【就比如有个人真名叫张三,但有人嫌这么叫不顺口,就给他取了个别名:小三,发现这样顺口多了,因此张三和小三是同一个人,只是不同的叫法而已】

 二.static

 1.定义

在C语言中,static是用来修饰变量和函数的

2.作用

(一)修饰局部变量

实例(未使用static进行修饰):

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

 这段代码大家应该比较熟悉,主要由while循环语句和构造的新函数test组成

输出结果

 

解释

 首先先看main函数,新构造的函数先别管它,开始执行时i=0,因为i<5,所以进入while循环,进入循环时先遇到构造的函数test,然后test函数便会启动自身的功能:【定义一个局部变量a(进入作用域时生命周期开始,离开作用域时生命周期结束),并赋值为1,然后a++变成2,最后打印a=2,离开test函数。】刚刚这整个过程都是在test函数内进行的,离开后遇到i++,i变成1,又因为1<5,再一次进入while循环。进入循环时仍然先遇到test函数:【定义一个局部变量a并赋值为1,然后a++,变成2,再打印出来】,然后遇到i++,i变成2,2<5,继续进入循环,直到i=5时循环结束,因此会打印出5次a=2。

 如果不能理解我通过代码运行的步骤来进行讲解(注意观察最左边黄色箭头的位置和左下角监视窗口i的值,箭头的位置表示正在编译中,还未执行):

调试过程:

 第一步:代码首先进入main函数,此时还未执行到int i=0,因此无法获取i的值

 第二步

第三步:此时i因为小于5,进入while循环

 第四步

 第五步:经过test函数并不会影响i的值,只不过像是按下了test函数的启动按钮,使test函数生命周期开始,打印出a=2,然后离开test函数,生命周期结束

 第六步

 第七步:

第八步

第九步

第十步

第十一步: 

 以上便是大概的流程,之后的重复动作就不放上去了,此处的用意在于理解为什么会打印5个a=2

上面写了这么多的目的便是和下面的static做一个对比,能够更加清晰的认识static

实例(使用static进行修饰):

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void test()
{
	static int a = 1;//a是一个静态的局部变量
	a++;
	printf("a=%d\n", a);
}
int main()
{
	int i = 0;
	while (i < 5)
	{
		test();
		i++;
	}
	return 0;
}

输出结果: 

 解释

有static修饰之后,第一次进入test函数时,a打印出2,和一开始那段代码一样,如果没有static,那么离开test时,a的值便会销毁,当你下一个循环再一次进入test函数时,a仍然先是赋值为1,然后a++,变为2,然后打印a=2。但如果加了static,那么离开test函数时a的值不会被销毁,即下一次进入test函数时a是等于2,然后a++,a变为3,再打印a=3。可以简单理解为不加static,结束之后a就会喝孟婆汤,下一次再进入test时,a便会忘了之前是多少;加上static便不会喝孟婆汤,下一次进入test函数时还知道自己之前是多少,不会重新来过

为了方便大家理解,可以结合下面的图(我会跳过其他部分内容,只展示test函数内部的运行结果

此时第一次进入test函数,a=1 

调试过程:

 

 

⬇此时第二次进入test函数,a的值并不是1,而是继承了上一次的结果2 

 

 

 

 之后的结果就不展示了,感兴趣的可以自己动手操作一下

小结:

static修饰局部变量时,局部变量的生命周期变长。人话:可以继承,不会被消灭

(二).修饰全局变量

实例(为使用static进行修饰):

 

 输出结果

 全局变量只要在源文件内部,进行外部声明(extern-声明外部符号),便可以在其他文件中使用,但两个源文件的后缀名要相同

实例(使用static进行修饰):

 输出结果

 

 解释

static修饰全局变量,改变了变量的作用域,让静态的全局变量只能在自己所在源文件内部使用

 (三).修饰函数(和修饰全局变量差不多)

实例:

 图片有点问题第三行应该是:extern int add(int,int);//声明外部函数

 输出结果

对于该函数不了解的可以去我主页查找之前写的加法代码讲解 :http://t.csdn.cn/DtioS

 小结

  • static修饰函数也是改变了函数的作用域(该说法不准确,但易于理解)
  • 准确的说法应该是static修饰函数改变了函数的链接属性
  • 普通的函数具有外部链接属性
  • 被static修饰的函数的外部链接属性变成了内部链接属性

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PH_modest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值