C语言关键字

平时未注意或不常使用的关键字:

auto 声明自动变量,缺省时编译器一般默认为auto

union 声明联合体数据类型

enum 声明枚举类型

register 声明寄存器变量

volatile 说明变量在程序执行时可被隐含地改变

extern 声明变量是在其他文件中声明(也可以看作是引用变量)

sizeof 计算对象所占的内存空间大小(计算变量所占空间时,可省略括号,计算类型所占空间时,不可省略括号)

void fun(int a[100])

{

    cout << "sizeof(a) = " << sizeof(a) << endl;

}

 

int main(int argc, char* argv[])

{

    int *p = NULL;

    int a[100];

    cout << "sizeof(p) = " << sizeof(p) << endl;

    cout << "sizeof(*p) = " << sizeof(*p) << endl;

    cout << "sizeof(a) = " << sizeof(a) << endl;

    cout << "sizeof(a[100]) = " << sizeof(a[100]) << endl;

    cout << "sizeof(&a) = " << sizeof(&a) << endl;

    cout << "sizeof(&a[0]) = " << sizeof(&a[0]) << endl;

    fun(a);

    return 0;

}

运行结果:

sizeof(p) = 4

sizeof(*p) = 4

sizeof(a) = 400

sizeof(a[100]) = 4

sizeof(&a) = 4

sizeof(&a[0]) = 4

sizeof(a) = 4

 

 

register:这个关键字请求编译器尽可能地将变量存在CPU内部寄存器中,register变量必须是能被CUP寄存器所接受的类型。这意味着它必须是单个的值,其长度等于或小于整型的长度。register变量可能不存放在内存中,不能用取值运算符“&”来获取其地址。

 

static

1.修饰变量

         静态全局变量:作用域仅限于变量被定义的文件中(从定义之处开始到文件结尾处结束),其他文件即使使用extern声明也无法使用它。定义之前的代码也不能使用它,需加extern才能使用。默认初始值为0。

         静态局部变量:在函数体内定义,就只能在该函数内使用。函数运行结束,该变量也不会销毁,函数下次使用时仍能使用该值。默认初始值为0。

static int j;

void fun1()

{

    static int i = 0;

    ++i;

    cout << "i = " << i << endl;

}

 

void fun2()

{

    j = 0;

    j++;

    cout << "j = " << j << endl;

}

 

int main(int argc, char* argv[])

{

    for (int k = 0; k < 3; ++k)

    {

       fun1();

       fun2();

    }

    return 0;

}

运行结果:

 

i = 1

j = 1

i = 2

j = 1

i = 3

j = 1

 

 

 

 

 

 

 

 

 

 

2.修饰函数

    指对函数的作用域仅局限于本文件。这样,不同人编写不同的函数时,不用担心同名。

    关键字static有着不寻常的历史。起初是为了表示退出一个块后仍存在的局部变量。后来又用来表示不能被其他文件访问的全局变量和函数。

 

union:

可以利用union类型数据测试系统的存储模式。

大端模式(Big_endian):字数据的高字节存储在低地址中,低字节存储在高地址中。

 

小端模式(Little_endian):字数据的高字节存储在高地址中,低字节存储在低地址中。

//if Little_endian?

bool checkSystem()

{

   union check

   {

      int i;

      char ch;

   }c;

   c.i = 1;

   return(c.ch == 1);

}

在vs2010上的测试结果为小端模式。

 

int a[5] = {1, 2, 3, 4, 5};

int *ptr1 = (int *)(&a + 1);

int *ptr2 = (int *)((int)a+1);

printf("%x, %x/n", ptr1[-1], *ptr2);

运行结果:5 2000000

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值