123456789L 该文字量是 long (int) 类型
1.234L 该文字量是 long double 类型
1.234 该文字量是 double 类型
1.234f 该文字量是 float 类型
037 该文字量即十进制int 型 31
0x1F 该文字量即十进制int 型 31
变量的类型决定了该变量可取值的集合(范围)以及可以对该变量执行的操作
’/0’表示值为0的字符,也就是空字符(null),我们通常用’/0’的形式代替0 ,以强调其字符属性,但是其数字值0
编译器会将挨着的两个字符串常量连接起来, 例如 “hello, ”” world” 等价于 “hello, world”
从技术角度看,字符串常量就是字符数组, 字符串的内部表示使用一个空字符’/0’作为字符串的结尾
标准头文件<striing.h>里面声明了strlen、strcpy等常用的对字符串进行操作的函数
枚举是一个整形常量值的列表 enum boolean {NO ,YES} 即相当于 int NO = 0; int YES = 1;
默认情况下,未显式初始化的外部变量和静态变量会被编译器初始化为 0,未经显式初始化的自动变量的值为不确定值(即无效值)
变量的声明可以使用const 限定符限定,该限定符指示变量的值不能被修改。对数组而言,const 限定符指示数组的所有元素的值均不能被修改 。 例如:
const double e = 2.3456;
const char msg[] = “waring”;
const 限定符也可以配合数组参数使用,它指示函数不能修改数组元素的值。 例如 : int strlen(const char s[])关系运算符的优先级比算术运算符低, 因此表达式 i < lim - 1 等价于 i < (lim – 1)
由 && 和 || 连接的表达式按从左到右的顺序进行求值,并且在能够确定结果为真或为假后立即停止计算
在关系表达式或者逻辑表达式中,如果表达式为真,则表达式的值为1;如果为假,则表达式的值为0
逻辑非运算符 ! 的作用是将 非0 操作数转换为0, 将操作数 0 转换为 1
当一个运算符的几个操作数类型不同时,就需要通过一些规则把它们转换为 某种共同的类型。一般来说,编译器的自动转换是指把“比较窄”的操作数转换为“比较宽”的操作时,并且在转换的过程中不丢失信息。例如:
int i;
float f;
f+i; // 表达式f+i 将整形变量 i 的值自动转换为float 型
针对可能导致丢失信息的表达式,编译器可能会给出警告信息,比如把比较长的整型值赋给比较短的整形变量,把浮点数赋值给整形变量,等等,但是这些表达式并不非法
库函数 atoi 源码
/* atoi: convert s to integer */
int atoi(char s[])
{
int i, n;
n = 0;
for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
n = 10 * n + (s[i] ' - 0');
return n;
}这段代码是实现该功能的最精炼的代码。