重拾C之数据

C中只有四种数据类型,整型,浮点型,指针和聚合类型

一。整型

  字符,短整型,长整形,整型

  标准中并没有规定长整形要比短整型长,规定:长整形至少应该和整型一样长,而整型至少应该和短整型一样长

  short int 至少16位,long int 至少32位,缺省的Int的位数多以机器的环境字长来决定。char型变量的值最好限制在unsigned char和signed char的交集里,考虑到兼容性问题,char最好不要参与算术运算

  整型字面值:用const声明的变量,当一个程序中出现整型字面值的时候,它属于那种类型有字面值最后的字符决定,L为long型,u为unsigned型,另外字符常量的类型总是Int,你不能在后面添加别的后缀

  枚举类型

  枚举类型就是指他的值为符号常量而不是字面值的类型;例如 enum Jar_Type {CUP,PINT,QUART,HALF_GALLON,GALLON}

  这条语句声明了一个类型,称为Jar_Type,这种类型的变量按如下方式声明

  enum Jar_Type millk_type,gass_can,medicine_bottle;

  这些类型的变量其实是以整型的方式存储,这些符号名的实际值都是整型,你可以为这些符号名制定特定的整型值

  enum Jar_Type{CUP=8,PINT=16,QUART=32,HALF_GALLON=64,GALLON=128};

  不要把整型和枚举值混在一起使用

二。浮点型

  float double long double组成,他们的长度规定和Int,short int ,long int 相近

三。指针

  C中不存在指针常量,如果你需要修改字符串,请把它存储与数组中      你可以把字符串常量赋值给一个“指向字符的指针”,但是不能把一个字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针,而不是这些字符本身

  声明指针:int *b,*c,*d;是声明三个指针的正确方式

四。typedef

  typedef声明的写法和普通的声明基本相同,只是把typedef这个关键词出现在声明前面

  char *ptr_to_char;  改为 typedef char *ptr_to_char;   ptr_to_char a; 声明a是一个 指向字符的指针

  应该 用typedef而不是#define 来创建新的类型

五。常量

  用const关键字来声明常量,他们的值不能修改

  如何初始化1。 在声明的时候对他进行初始化 int const a=150; 2.在函数中声明为const的形参在函数被调用时会得到实参的值

  当涉及到指针变量时,情况变得有趣。

  Int *pi;

  int const *pci; 是一个指向整型常量的指针,你可以修改指针的值,但是你不能修改它所指向的值

  int * const cpci;是一个指向整型的常量指针,指针是常量,它的值无法修改,但是你可以修改它所指向的整型的值

  #define指令时另一种创建名字常量的机制 只要允许使用字符值常量的地方都可以用,比如声明数组的长度,而const只能用于允许使用变量的地方

六。作用域

  1.代码块作用域(位于一对花括号之间的所有的语句称为一个代码块)

  2.文件作用域

  任何在所有代码块之外声明的标识符都具有文件作用域,从声明处开始到它所在源文件的结尾处都可以访问,在文件中定义的函数名也具有文件作用域

  3.原形作用域

  只适用于在函数原型中声明的参数名,,在原型中(也就是声明的时候),参数的名称并非必需,可以随便起 ,不必跟定义的时候的形参名保持一致

七。链接

  三种:external,internal,none

  代码块外的和函数默认的属性是external,而代码块内部的默认为时None型的

 None总是被当做单独的个体,也就是说该标识符的多个声明被当做独立不同的实体, internal的标识符在同一个源文件内的所有声明中都指向同一个实体,external的标识符不论声明多少次,位于几个源文件中都表示同一个实体

  static关键字可以将external链接属性的改为Internal属性的,而且只对缺省链接属性为external的声明才起作用  

  extern关键字,如果为一个标识符知道指定external链接属性,则,可以访问在其他位置定义的这个实体

八。。存储类型

  有三个地方可以用于存储变量:普通内存,运行时堆栈,硬件寄存器

  auto,static,register

  尽量不要用register,因为编译器不一定会理睬,在有些计算机中,可以将使用频率最高的那些变量声明为寄存器变量,可以提高程序效率

  在代码块内部声明的变量的缺省类型时auto ,也就时说它存储在堆栈中,在代码块之外声明的变量的缺省存储类型为static类型的,这类静态变量在程序运行之前创建,在程序的整个执行期间始终存在,始终保持原型的值,除非给他赋一个不同的值,或者是程序结束

  函数的形参不能声明为静态的,因为实参总是在堆栈中传递给函数,用于支持递归,在代码块内部声明的变量,如果给他加上static关键字,就变成了静态局部变量了

初始化:静态变量,系统会自动给其赋值,而动态的不会,如果不给他显式的初始化,他们的值总是垃圾

  

posted on 2015-03-07 13:36  玲先霞  阅读(120)  评论(0编辑  收藏  举报

导航