【第一章】
“+”,“-”,“*”,“/”,“%”这5个算术运算符都是双目运算符。除%运算符外,其他算术运算符的两个操作数可以是整型(short int、int、long int、unsigned short int、unsigned int或unsigned long int)和实型(float或double)的混合类型,运算结果的数据类型是:两个操作数的数据类型中,具有较高级别的数据类型。例如,一个int型操作数和一个float型操作数的运算结果是float型;一个float型操作数和一个double型操作数的运算结果是double型。
字符串不应当用关系运算符比较,因为被比较的不是字符串的内容本身,而是字符串的地址。由于字符串的地址是由编译器决定的,所以表达式的结果或为0,或为1,并不确定。
对于存储类型为自动类型(auto)或寄存器(register)类型的变量来说,没有赋值,意味着其值为无效值(随机的、不确定的值,程序员不可控);对于存储类型为外部类型(extern)或静态(static)类型的变量来说,没有赋值,意味着其值为默认值(数值型变量的默认值为0,字符型变量的默认值为空)。
如果一个变量的存储类别为外部(extern)类型,则称该变量为外部变量。外部变量带有赋值的声明称为定义性说明,外部变量不带有赋值的声明称为引用性说明。如果一个全局变量在声明时未指定存量类别,则默认为外部变量,并且该声明为定义性声明;若此时未初始化,则其有默认值0。
定义性声明指示编译程序为该外部变量分配内存,而引用性声明仅告诉编译程序该名字的变量在程序的其他地方已经有啦定义性声明,在此只是引用其名字而不为其分配空间。
引用是为了解决指针抽象的概念而产生的一个特殊的定义。从作用机制看,引用与指针类似;从书写的方式看,引用有点像变量;从存储结构看,引用有点类似于符号常量,它仅仅在编译时有效,运行时么有空间的概念。
引用和指针在函数参数传递时作用相似,但也有如下不同:
1)指针是一个变量的地址,而引用则是变量的别名。因此,在程序中表示对象变量时,前者要通过取内容运算符“*”,而后者可以直接代表。
2)指针是可变的,它可以忽而指向变量a,忽而指向变量b,而引用则只能在声明时一次初始化,不能在随后变成别的变量的引用。
3)引用没有空间的概念。