嵌入式C基础知识(8)

关键字static的作用是什么?

在C语言中,关键字static有三个明显的作用:

1) 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

C语言中的静态变量是什么? 为什么在 C 中使用静态变量?

静态变量具有保留其值的特性,即使它们超出了它们的范围。 这意味着只能初始化一次静态变量。 它的范围是本地的,但它一直存在到程序结束。 编译器将变量保留到程序结束。可以在函数内部或外部定义静态变量。 静态变量的默认值为零。 静态变量在程序执行之前一直有效。

C语言中静态变量的语法:

static datatype variable_name = value;C

静态变量通常用于计数。 例如,函数 openBakAccount()会在银行开立新账户时调用。 然后,要统计开户总数,可以在函数中声明一个静态变量,并在每次函数调用时增加它。

C语言的数据类型有哪些?

基本类型:包括整数类型和浮点类型,char属于整数类型。

派生类型:包括指针类型,数组类型,结构类型,共用体类型和函数类型。

枚举类型:枚举数据类型的作用是让数据更加简洁,易读。枚举数据的定义格式为:enum 枚举名 {元素1,元素2,...}; 枚举类型中的每一个元素都有其代表的值。未指定情况下,第一个枚举元素的默认值为0,后面每一个元素的值为前一个元素加。示例如下:

enumDAY{MON,TUE,WED=5,THU,FRI,SAT,SUN};enumDAYday=MON,day1=THU;printf("%d\n",day);//day的输出是0

printf("%d\n",day1);//day1的输出是6

void类型:void类型指定没有可用类型的值。当函数不需要返回值时,必须使用void限定。例:void func(int a, char *b);当函数不允许接受参数时,必须使用void限定。例:int func(void);void用来定义指针时,该指针可以指向任意类型的数据。

static全局变量与普通的全局变量有什么区别?static函数与普通函数有什么区别?

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。

全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。

这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。

对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xiaoyi9812

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

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

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

打赏作者

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

抵扣说明:

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

余额充值