zoukankan      html  css  js  c++  java
  • C语言知识二——关键字

    关键字是编译器预先定义好的有一定意义的字符串,c语言有32个关键字。C语言的关键字分为:(1)数据类型关键字;(2)逻辑结构关键字;(3)类型修饰符关键字;(4)自定义类型关键字;(5)杂项

    一:数据类型关键字

      从c语言角度理解计算机由三个组件组成1、cpu;2、资源;3、连接cpu和资源的数据总线和地址总线。c语言操作的对象是资源也就是内存(包含LCD缓存、.....),那么在c语言中就需要对这些资源的属性进行描述,资源的属性很多,其中一个属性为资源的大小,在c语言中数据类型关键字可以描述资源的大小。

      1、char

      硬件芯片操作的最小单位为bit,软件操作的最小单位为char,软件如果操作的最小单位是bit,那么软件开发的成本将会很大,因此软件操作的最小单位为char。应用场景:在需要硬件处理最小单位时,使用char,硬件对字符串的发送接收。

      2、int,long,short

      int占用的字节大小由编译器决定,int是编译器最优处理的大小,也是系统一个周期能够接受的最大处理单位,等于数据总线的最大容量。long和short是对int的补充,需要特殊长度限制时使用。

      3、unsigned、signed

      数据使用无符号数,数字使用有符号数。如,摄像头采集的数据,显卡产生的数据,这些数据用无符号数表示。有符号数和无符号数还与移位运算有关,当右移有符号数时,符号位不会移动,一直占位;而无符号数不会出现这种情况。char a=-1; 实际内存为0xff

      4、float、double

      注意常量的表示,3.2f表示float类型,3.2表示double类型。

      5、void

      只是语义意义上的关键字,表示空。

    二:逻辑结构关键字

      程序的运行是将代码放到内存空间中,根据pc指针的指向,决定运行哪一段代码,可以根据逻辑结构关键字,调整pc指针的指向来执行需要的代码,而调整的方式可以有(1)顺序执行、(2)条件选择、(3)循环执行

      1、if else

    if(条件表达式)

    {}

    else

    {}

      2、switch case default  

      swich case 条件中必须为整型数字,不能为其他的内容,如浮点数,必须加上break,不然会依次往下执行。

    swich(){

      case 1:

      break;

      case 2:

      break;

      default:

      break;

    }

      3、do while for

      for循环用于次数,while,do...while 用于条件,do...while至少执行一次。

      4、continue break goto

      循环中使用的控制字符,goto在相同的函数中使用,不能在不同的函数之间跳。

    三、类型修饰符关键字

      类型修饰符对数据类型关键字和自定义类型关键字进行修饰。类型的属性除了大小外,还有类型的存储位置,类型修饰符说明了类型的存储位置。

      1、auto

      auto int a;即为int a;平时使用的是省略形式。auto表示变量分配在普通内存可读可写空间的区域。{auto char a;},在大括号中定义的则表示在栈空间中分配的区域。

      2、register

      在一些经常需要访问到的变量,定义register 可以加快变量的访问,register int a;编译器在编译时,尽量会安排在cpu的寄存器中去存放变量a,但是如果寄存器空间不足时,还是会将变量a存放在存储器中。register这个关键字中看,不中用,起到和人交互时,表明变量需要快速的访问。寄存器没有像内存一样的地址,只由符号表示寄存器,因此不能用取地址符取其地址。

      3、static有三种应用场景

        1、修饰函数的内部变量,将函数内部变量的存储区域变为全局变量存储区。同一函数调用可以获取上一次的值

        2、修饰全局变量,限制作用域

        3、修饰函数,限制作用域

      4、 volatile

       volatile:告知编译器,编译时不做优化编译。某一变量值的改变是由外部改变的,而不是程序内部改变的,优化会导致不去不对值的操作而出问题。例如:int a = 100;while(a==100);操作;如果程序内部不改变a,此时会优化编译不执行while比较,一直执行操作,但是a的改变可能来自外部,这样会优化编译会导致出错。

    三、自定义类型关键字

      c语言编译器默认的内存分配形式不符合实际资源的形式,自定义类型为基本元素的集合

      1、struct

      结构体是对变量的打包,内存空间并没有申请,只是自己定义了个数据类型。结构体类型对里面元素的顺序是有要求的,结构体有字节对齐问题,按照4字节对齐,不同的顺序可能导致结构体的存储空间不一致。

      2、enum

      枚举类型,人与人交流的语义限制符 

        1、enum {MON,TUE,WED}实现的效果和

        #define MON 0

        #define TUE 1

        #define WED 2

        一样,用enum可以表示这些元素是一个组合的概念而不是一个个单独的元素。

        2、enum abc{MON,TUE,WED}

        enum abc t;sizeof(t)为4个字节的大小,变量表示可以取集合中的某一个值,但是t=100依然能够赋值进去,enum只是和人交流的语义限制符,没有表示强制的概念。

        应用场景:就是常量属于一个类型的,组合起来可以更好地表示是一个组合的概念。

      3、union

      共用体表示其里面的元素共用起始地址的一段内存。用得不是很多,多用于技巧性的代码。

       4、typedef

      typedef : 起别名,对于变量名,见名知意。一般看到XXX_t的就为一个数据类型用typedef起的外号。不关注占用内存的大小,而是关注实际的物理意义。

    五、杂项  

      1、sizeof: 一般写法sizeof(a),查看变量a或者数据类型占用的字节空间大小,一般认为是函数,其实是不对的,函数是在运行过程中调用,而关键字是在编译的过程被识别。而sizeof 在编译的过程被处理,而没有在函数的运行过程被处理,因此是一个关键字。

      2、return

  • 相关阅读:
    Run Shell Commands in Python
    Install Fabric 1.8.3 Manually on Ubuntu 12.04
    Setup a Simple HTTP Proxy Server
    去掉文件中的^M
    Build Web Server with Apache and Passenger
    Delete Trailing Spaces with Vim
    Specify Default JDK on Ubuntu
    总结
    问题
    HTTPS 和 HTTP
  • 原文地址:https://www.cnblogs.com/zjsthunder/p/11392113.html
Copyright © 2011-2022 走看看