C语言查漏补缺——关键字篇

本文详细介绍了C语言中的几个关键关键字:Register用于声明寄存器变量,Volatile标记可被隐式改变的变量,Sizeof计算对象内存大小,以及Const和Typedef的用法。还探讨了Static在变量和函数中的作用,包括内存分配和作用域。同时,文章通过实例解析了Sizeof和strlen的区别,以及结构体的成员对齐规则。
摘要由CSDN通过智能技术生成

Register关键字

Register 声明寄存器变量【尽可能将变量存在CPU内部寄存器,不是绝对哦】

CPU读取数据:内存——寄存器——CPU

虽然寄存器的速度非常快,但也有限制:register变量必须是能被CPU寄存器接受的类型,意味着register变量必须是一个单个的值,并且其长度应小于或等于整型的长度。而且register变量可能不存放在内存中,所以不能用取址运算符&来获取register变量的地址。


Volatile  说明变量在程序执行中可被隐含的改变


Sizeof 计算对象所占内存空间的大小,这个是关键字(⊙o⊙)哦~

int i = 0;
A)sizeof(i)  B)sizeof(int)  C)sizeof i  D)sizeof int

上面,ABC都是对的,D不对。

【注意】sizeof在计算变量所占空间大小时,括号可以省略;而计算类型大小时,不能省略。

看看下面的练习:

注意,sizeof(a)的值,我们再看:


【总结】Sizeof计算大小时,其实传入的是类型,与变量具体的值无关。&a、&a[0]、&a[0][0]都是地址,所以大小都为4;a的类型是char[10][10],所以是100,同理,a[0]、a[1][1]的类型分别是char[10]和char,所以大小分别是10和1。


此处传入的是指针char*,所以大小是4.若b为int[100],则传递的是int *。

【总结】函数参数为数组时,传递的不是整个数组,而是数组地址,即指针。


Sizeof与strlen的区别:

再来一个更劲爆的:


Sizeof计算结构体大小:

成员对齐规则是:每个成员按其类型的对齐参数(通常是这个类型的大小)和指定的对齐参数中较小的一个对齐,即min(sizeof(item), n)。并且结构的长度必须为所用过的所有对齐参数的整数倍,不够就补空字节。


s1的大小为3,而s2的大小为5,说明s1的最大对齐参数是1,即s1的数据成员的最大对齐参数,而不是将s1的大小作为一个对齐参数。


Unsigned关键字

看一个例子:


Const关键字 == readonly

Const修饰的只读变量必须在定义的同时初始化。

注意,case语句后面不可以是const变量。


Const与define

Const修饰变量和数组时,可以放在类型的前面和后面:

修饰指针的时候:


Const修饰函数的参数,不希望参数值在函数体内意外改变。


Typedef关键字


Typedef与define的区别:

Define是宏定义,在预编译的时候起作用,只是做简单的替换;

Typedef是为类型新建一个别名,在编译的时候起作用。


#define int32 static int

Define是用第一个字符串int32替换第二个空格后面的所有内容。

Typedef static int int32;

编译报错,多个类型声明。


参考:

http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html


Volatile关键字

Volatile告诉编译器,变量是随时可能发生变化的,每次使用它的时候必须从内存中取出i的值。

const volatile int i = 3; 是只读变量。

 

Union关键字

  //返回1表示是小端模式;返回0,表示是大端模式
  int checkSystem()
  {
      union check
      {
          int i;
          char ch;
      } c;
      c.i = 1;
      return(c.ch == 1);
  }

 static关键字

 修饰变量

静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用extern声明也没法使用它。准确的说是从定义之处开始,到文件结尾处结束,在定义之处前面的代码也不能使用。

静态局部变量在函数体内定义,只能在函数内使用,但生命周期与文件相同。

【注意】静态变量只在定义时初始化一次。如下代码:


每次调用f1时,i的值都会递增,不会再重新定义;每次调用f2时,j的值都会被重新复制,所以,j只递增一次。

 

 修饰函数

静态函数的作用域仅限于本文件(又称内部函数)。

综上,关键字static有俩含义:退出一个块后仍然存在的局部变量;不能被其他文件访问的全局变量和函数。

静态变量的内存分配在堆栈,因为它们的大小在编译的时候就是确定的。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值