C语言学习笔记22/08/13

常见关键字

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

关键字 register:

当我们想要处理大量且频繁被使用的数据时,就可以将其放到寄存器中,从而提高处理效率。

关键字 typedef:

理解为类型重命名,它的主要作用是使复杂类型简单化。

关键字static:

static是用来修饰变量和函数的,它主要三种使用形式:
(1) 修饰局部变量(静态局部变量)

同样都是循环5次,为什么输出的结果不同呢?这里就引出了static修饰局部变量的作用:

  局部变量的生命周期是:从进入作用域生命周期开始,出作用域生命周期结束。因此,程序1每次调用test函数都要经历变量的创建和销毁,所以每次打印出a的值都是2(1+1)。

  而对于程序2,test函数中的a变量被static修饰,而static关键字的作用是改变局部变量的生命周期。也就是说变量a的生命周期不再局限在test函数内部,而是整个程序,因此调用test函数a变量只创建一次,在程序结束时才会销毁,因此循环五次输出2,3,4,5

结论:static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。(本质上:改变了变量的储存类型)

(2) 修饰全部变量(静态全部变量)

  结论:一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用(本质上:是因为全局变量具有外部连接属性,被static修饰后就变成了内部连接属性)

(3) 修饰函数-称为静态函数 

结论:一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用(本质上:static是将函数的外部链接属性变成了内部链接属性)

auto 是自动的 - 每个局部变量都是auto修饰的

extern 是用来申明外部符号的

signed 有符号的 10-20

unsigned 无符号的

union 联合体(共用体)

void 无-空

#define定义常量和宏

在C语言中宏的使用是替换,也就是说你定义的是什么,你就直接使用什么。

计算机中数据可以存储到哪里呢?

寄存器                更小

高速缓存            几十MB

内存                   8G~16G

硬盘                   500G - 买的

网盘                   2T - 免费的

当存储单元的容量越来越大时,速度越来越慢,价格越来越低

CPU 并不会直接和每⼀种存储器设备直接打交道,⽽是每⼀种存储器设备只和它相邻的存储器设备打交道,寄存器的读写速度是最快的。

 内存是怎样编号的?

  内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

  这里就好比电脑是我们的学校,内存就是学校的一个宿舍楼,而一个内存单元就代表宿舍楼中的一个宿舍,而宿舍的门牌号就表示一个地址。
 

取地址

变量是创建在内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的,并且取地址时取出的是第一个字节的地址(较小的地址) 。

指针

C语言定义指针变量是用来存放地址的。

显然这里使用的是整形指针,除此之外还有char*指针类型,float*指针类型等等。

指针变量的大小跟指针的类型是没有关系的,它取决于地址的大小。

对于地址的大小,这里有个硬性规定:

  • 32位平台下地址是32个bit位(即4个字节)
  • 64位平台下地址是64个bit位(即8个字节)

计算机操作系统有32位和64位。

32位机器有32跟的地址线,地址线可以通电,是物理线来的,正点是1,负电是0。

由电信号转换成数字信息:1和0组成的二进制序列

每个32位进制都给一个编号,每个位置上是0或1,共有2^32种组合。

我们把这些编号称为内存单元的地址,共有2的32次方个内存单元。

 算一下2的32次方可以管理多少内存单元?

 

由于char - 1 byte = 8 bit - 8个地址,太浪费了,所以最终定义为一个内存单元是一个字节(byte)然后分配地址。当一个变量所占字节是4个字节的时候,取地址a拿到的是4个字节的地址。

指针的大小是相同的!

为什么呢?

因为指针变量的大小跟指针的类型是没有关系的,它取决于地址的大小。

指针需要多大空间,取决于地址的存储需要多大空间。

  • 32位平台下地址是32个bit位(即4个字节)
  • 64位平台下地址是64个bit位(即8个字节)

结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。

----------------------------------------------今天开始刷C技能树---------------------------------------------------------

C语言之父丹尼斯·麦卡利斯泰尔·里奇(英语:Dennis MacAlistair Ritchie,1941年9月9日-2011年10月12日),美国计算机科学家。黑客圈子通常称他为“dmr”。他是C语言的创造者、Unix操作系统的关键开发者,对计算机领域产生了深远影响,并与肯·汤普逊同为1983年图灵奖得主。

C语言时间线

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值