C语言学习笔记:初识C语言(6)

一、关键词typedef

typedef的作用:给类型起一个新的名字。只能对类型进行重命名(比如int

在使用一些类型的时候会不方便,比如定义unsigned int变量需要输入太多字母,就可以使用typedef进行重定义变量名,相当于数学上的换元

(signed和unsigned的作用是判断是否有符号位,符号位是二进制的最前面一位)

二、关键词static

static的意思是“静态”,在C语言中用来修饰变量和函数

修饰局部变量时称为静态局部变量,修饰全局变量时称为静态全局变量,修饰函数时成为静态函数

1.static修饰局部变量

(void的含义是无返回值,也就不需要有数据返回和return)

在主函数中,一进入while循环调用test函数生成一个变量a,由于a是局部变量,test函数结束(离开作用域)之后a被销毁。i++结束后i返回,i小于10再进入循环,在test函数中又重新生成了局部变量a。在一次while循环中由test函数打印a的值为2 ,总共进行了10次循环,所以打印出十个2 。  

static修饰变量(函数)使变量(函数)具有记忆性,再次调用函数就会使用上一次打印的值

a在一次test函数结束(离开作用域)之后没有被销毁,下一次test函数开始时直接被拿过来使用,此时test函数内部重新定义局部变量a 的代码已经没用了

static修饰局部变量本质上改变了变量的存储位置

内存分为三个区:栈区、堆区、静态区

栈区内数据的特点:进入作用域创建,离开作用域销毁,所以局部变量是存放在栈区的

当一个局部变量被static修饰之后就变成了静态变量,存放在了静态区

静态区内数据的特点:离开作用域也不销毁,程序的生命周期结束后才销毁

改变了变量的存储位置影响了变量的生命周期

静态变量和全局变量的区别:静态变量还存在作用域,作用域与原来的局部变量一样

变量在创建之后,在整个程序运行的过程中不会改变存储位置

用F10打开监视,运行到test函数时F11进入test函数,然后在test函数右键点击“转到反汇编”

发现static int a=1没有对应的汇编语言,程序执行时没有汇编语言的代码不能参与执行,所以程序运行时a永远是第一次创建好的a

对a和a的地址&a进行监视发现,随着循环进行,a在变化,但&a不变(只有F11进入test函数之后才能监视a和&a)

2.static修饰全局变量 

当static修饰全局变量时,另一个文件的函数不能通过extern声明来调用该全局变量

 

因为全局变量具有外部链接属性,static修饰全局变量时,全局变量的外部链接属性就变成了内部链接属性,其他的源文件(.c)就不能使用该全局变量

3.static修饰函数

函数也是具有外部链接属性的:

函数被static修饰过后,外部链接属性也变成了内部链接属性,其他的源文件(.c)就也不能使用:

三、关键词register

 register——寄存器关键词

变量放在寄存器中就成了寄存器变量,访问的速度更快

四、define定义常量

define可以在主函数前定义一个常量,主函数中都可以使用这个常量

称为difine定义标识符常量

五、宏

宏的特点是宏具有参数

先写#define,宏的名称(宏名)是ADD,括号里是宏的参数(x,y),宏体是((x)+(y))

宏的参数是没有类型的

宏的作用是完成替换,工作原理就是将主函数的变量(a,b)送到宏的参数中,主函数中的宏名被替换成了宏体

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值