还有这种操作!!!!!(C语言关键字)

截至目前为止,C语言关键字共有32个,它们分别是:
1、{auto、static}//动态静态空间开辟

2、{char、short、int 、long 、float 、double 、unsigned 、signed}、//类型

3、{ if、 else 、do 、while、 switch、 case、 break、 default、 continue、 goto、 for }、//判断,选择,循环语法

4、{const 、enum、 extern、 register、 sizeof、 struct、 typedef、 union、 void、 volatile、 return }//特殊意义关键字
大致可分为这么4个类别,那么,接下来就简单介绍一下第4组,常用的特殊关键字。
No1,**********const*********
在程序员编译过程中,可将不希望后期发生改变的变量加上const加以保护, 在C语言中,const 定义的常变量,具有常属性,其值不可改变,但本质上还是变量。在C++中,直接将const定义的变量当作常量处理。举个栗子:

void test()
{
      const int num=1;
      int array[num]={0};
      //在.C中,const 定义的常变量,具有常属性,但仍是变量,故而,这样书写是错误的,但在.cpp文件中,这样书写就是正确的,直接将num当作常量对待。
}
#include<stdio.h>
int main()
{
      const int num=10;
      num=20;//这里对num进行了值得修改,程序失败
      printf("%d\n",num);
      return 0;
}

No2、**********enum*********
enum(枚举):简单的说枚举也是一种数据类型,这种数据类型只包含数据的集合,举个栗子:

 enum Sex  {
                       MALE,       //0
                        FEMALE,//1
                        SECRET//2
               };

用法: enum Sex sex=MALE;

 enum Sex  {
                       MALE=1,       //1
                        FEMALE=2,    //2
                        SECRET=3     //3
               };
               //枚举允许附初值

No3、**********extern*********
extern 是用于变量,函数声明的关键字。

extern int g_val;//变量声明
extern void test();//函数声明
int main()
{
    void test();//hello world
    printf("%d\n",g_val);//2017
}
void test()
{
printf("helloworld\n");
}
int g_val=2017;

实际上,程序若直接写int g_val;但主函数输出值将会把g_val按全局变量处理,输出值为0;为了区别,故而在变量前加上extern,来说明该条语句仅是变量(函数)声明。

No4、**********register*********
register寄存器变量。
这里写图片描述
如图所示,运行速度寄存器>高级缓存区>内存>硬盘,故而,将一些运算数值较大的放在register中,作用是建议CPU优先从寄存器中取值处理,但

register int num=10;
&num

这种操作时错误的,&(取地址运算符)是找到变量在内存中的地址空间,而显然寄存器不属于内存中的一部分,所以&num找不到相应地址。
No5、**********static*********
static静态变量的定义。
static修饰局部变量,改变局部变量的生命周期,不改变作用域
static修饰全局变量,改变全局变量的作用域,不改变生命周期

void test1()
{
    static int a=1;
    a++;
    printf("%d",a); 
}
static int g_val=1;
void test2()
{
    g_val=1;//变量赋值
    g_val++;
    printf("%d\n",g_val);
}
int main()
{
    int i=0;
    for(i=0;i<10;i++)
  {
    void test1();//2,3,4,5,6,7,8,9,10,11
    void test2();//2,2,2,2,2,2,2,2,2,2
  }
    return 0;
    }

No6、**********typedef*********
typedef类型定义形式:typedef 被替换类型 替换类型

int main()
{
    unsigned int age=20;
     unsigned int aver=20;
      unsigned int score=20;
       unsigned int size=20;
         printf("%d\n",age);
}

上述例子中,多次出现unsigned int 类型,为了后继便于书写,可将该类型重新定义,如typedef unsigned int unit;后面凡遇到unsigned int 的地方均可用unit代替。如:unit age=20;
No7、**********void*********
void 无返回值类型

void test()
{
   printf("hello world\n");
}
int main()
{
   test();
   test(1);
   test(1,2);
   test(1,2,3);
   }
   //屏幕上输出四次hello world
void test(void)//第一个void 代表函数无返回值,第二个代表函数无参
{
   printf("hello world\n");
}
int main()
{
   test();
   test(1);
   test(1,2);
   test(1,2,3);
   }
   //编译错误,程序无法正常执行

No8、**********volatile*********
voiltile保证内存的可见性,每次对num的值从内存中取,而并非从寄存器中直接取

int main()
{
   const int num=10;
   int* p=(int*)&num;
   printf("%d\n",num);//运行结果为10
   *p=20;
   printf("%d\n",num);//运行结果为10
}

这段代码执行完毕后,程序运行结果均为10,但观察内存可知,在程序运行的过程中num确实被改到20,这是什么情况哩?怎么解决?

int main()
{
   volatile const int num=10;
   int* p=(int*)&num;
   printf("%d\n",num);//运行结果为10
   *p=20;
   printf("%d\n",num);//运行结果为20
}
//这里volatile 保证内存的可见性。

No9、**********sizeof*********
sizeof求变量内存空间所占字节数。用法形式为sizeof(类型)或sizeof(变量名),举个栗子:

int main()
{  
   int a=10;
   int array[10]={0};
   printf("%d\n",sizeof(int));   //4
    printf("%d\n",sizeof(a));    //4
    printf("%d\n",sizeof(array));  //4*10=40
    return 0;
}

No10、**********struct********
代码九九归一,至于这第十个,struct,欲知后续结果,请看下回分解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值