《c和指针》笔记2
枚举类型
枚举类型就是指它的值为符号常量而不是字面值类型.符号名被当作整型常量处理,声明为枚举类型的变量实际上是整数类型。因此可以将任何整型变量赋值给枚举变量,但是应该避免这种方式使用枚举类型,因为把枚举变量同整数无差别的混合在一起使用,会削弱它们值的含义。
浮点类型
浮点家族包括float、double和long double类型。ANSI标准仅仅规定long double至少和double一样,而double至少了float一样长,而读点类型至少能容容纳从10-37到1037之间的任何值。浮点数子面值默认情况下为double类型。
指针
指针指示地址的另一个名字而已,指针变量就是一个其值为另外一个(一些)内存地址的变量。
C语言内部没有定义指针常量这个概念。
声明一个指针的形式如下:
int *a; 或者 int* a;
但是后者却不是一个好的技巧,因为如下语句为造成混淆。
int* a, b, c;
可能我们会认为a、b、c都是指向int类型的指针,但是其实只有a是指向int类型的指针而b、c只是int类型而已。
char *message = "Hello, World!";
以上是对一个字符串常量进行初始化,message是一个指向char类型的指针。看上去似乎是赋值给表达式*message,事实上是赋值给message本身的。
链接属性
链接属性总共有3中:1、enternal(外部);2、internal(内部);3、none。
属于external链接属性的标识符不论声明多少次、位于不同源文件都表示同一个实体。属于internal的标识符在同一个源文件中的所有声明都是同一个实体,而位于不同源文件中的声明则是不同的实体。
关键字extern和static的作用便是修改标识符的链接属性。
static只对链接属性为internal的标识符起作用,令其变为internal链接属性。而extern只对源文件中一个标识符的第一次声明起作用,使其链接属性变为external。
存储类型
代码块之外声明的变量总是存储于静态内存当中的。而内部声明的变量默认存储类型是自动的,存储于堆栈中,称为自动变量。
当程序每次执行到声明自动变量的代码时,自动变量才会被创建,程序离开代码块则自动变量自动销毁。
关键字register用于表示将自动变量存储与机器的硬件寄存器当中。但是如果有过多的变量被声明为register,编译器也只会选择前几个实际存储于寄存器中。
在典型情况下,将那些频繁执行间接访问操作的指针声明为寄存器变量可以提高程序的效率。但是将函数的形参声明为寄存器变量,则对于优化节省的时间和空间开销远远比不上复制几个值所用的开销。
今天就到这里了,明天继续,加油。