当前位置:编程学习 > C/C++ >>

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

Register关键字


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

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

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

 

 

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

 


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

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

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;

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

 

\
 


Volatile关键字

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

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

 

Union关键字

 


[plain]
//返回1表示是小端模式;返回0,表示是大端模式 
int checkSystem() 

    union check 
    { 
        int i; 
        char ch; 
    } c; 
    c.i = 1; 
    return(c.ch == 1); 

  //返回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有俩含义:退出一个块后仍然存在的局部变量;不能被其他文件访问的全局变量和函数。

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

 

 

补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,