关键字(1)

发布于:2022-10-28 ⋅ 阅读:(311) ⋅ 点赞:(0)

目录

1、关键字typedef

2、关键字static


1、关键字typedef

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

我们应该怎么用呢? 比如我们要定义一个无符号的整型,我们可以这么写

有没有发现

unsinged int num;

 这个名字是不是有点长了,咱们能不能重新命个名字呢?答案是当然可以的

 我们可以把unsigned int(类型)重命名为ui(开头首字母缩写),ui就是unsigned int的别名,这样写把代码复杂类型简单化。

2、关键字static

在C语言中:

static是用来修饰变量和函数的

①修饰局部变量 - 称为静态局部变量

②修饰全局变量 - 称为静态全局变量

③修饰函数 - 称为静态函数

①修饰局部变量

我现在写了这几行代码,那么问题来了,这个程序如果执行起来了,会在屏幕上打印什么呢?

Ctrl + F5让代码跑起来:

答案为10个1。为什么是10个1呢?

因为int a是个局部变量,进入作用域生命周期开始,出作用域生命周期结束。

这个在初识C语言2中讲过了写文章-CSDN创作中心

那如果我在变量a前加static结果还会是一样吗?那我们来看一下。

答案是1~10。为什么能输出这个结果呢?static修饰局部变量的作用是什么呢?

分析:第一个结果为1很好理解,可是第二个结果为2有没有发现第一次的结果并没有销毁。以此类推.....

那么static的本质是什么呢?我们来看看下面这幅图

栈区是进入作用域创建,出了作用域就会释放,放在静态区的数据创建后,直到程序结束才会释放。被static修饰都是在静态区里。堆区目前不做了解

总结一下,普通的局部变量是放在栈区上的,这种局部变量进入作用域创建,出了作用域释放,但是局部变量被static修饰后,这种局部变量就放在了静态区,放在静态区的变量,创建好后,直到程序结束才释放。  

本质:static的修饰改变了局部变量的存储位置,因为存储位置的差异,使得执行效果不一样。

注意:被static修饰是不影响作用域的!!!但是生命周期变长了。

②修饰全局变量

我们回顾一下全局变量,如果还有不懂的小伙伴可以点开后面的链接观看(写文章-CSDN创作中心

若全局变量a被static修饰,结果又会是如何呢?

程序走起来发现报错了(无法解析的外部符号),所以为什么会出现这种现象呢?

原因是:全局变量本身是具有外部链接属性的,在一个文件中定义的变量,在另一个文件可以通过链接使用(extern),但是如果全局变量被static修饰,这个外部链接属性就变成了内部链接属性了,这个全局变量只能在自己所在的源文件内部使用。最终使得全局变量的作用域变小了。

③修饰函数

其实static修饰函数和修饰全局变量非常类似。让我们看看下面的代码。

如果还有不熟悉函数的小伙伴可以看看后面的链接(写文章-CSDN创作中心

那如果我在另一个源文件定义Add函数会怎么样呢?

其实这还是会报错,很明显这和全局变量非常相似,需要定义一个外部符号extern。

现在,我们在函数前加个static会怎么样呢? 

 

结果是程序报错了(未定义外部符号),原因很简单,函数本身是具有外部链接属性的,被static修饰后,外部链接属性就变成内部链接属性,使得这个函数只能在自己所在源文件内部使用,其他源文件无法使用。和全局变量其实是一个道理。限制看作用域。

最后讲到这里,你是否对这两个关键字有所了解呢?

 

 


 

 

本文含有隐藏内容,请 开通VIP 后查看