c 的数据类型、运算符、表达式 (第二章)
2.1 变量名
变量名由字母和数字组成,第一个字符必须是字母,下划线 "_" 也算是一个字母,变量名是严格区分大小写的,除了常用的关键字,如 if else while int float ... 其他的都能用。 变量的命名很重要,基本遵循功能驱动的方式,简洁、带有说明的英文单词,c好像喜欢用小写及英文单词的缩写来命名,可以借鉴。
2.2 数据类型
char 字符串 int 整型 float 浮点型 double 双精度型 。2个限定符 unsigned 非负数 signed 实数 ,如果是32位的计算机,chars 含有8个bits , unsigned chars 的范围是 (0-255) ,signed chars 的范围是 (-128) - (127) 。
2.3 常量
整型常量 1234 , 123456789L L表示 long ,ul表示 unsigned long。 浮点型常量 123.31f,同样 f 表示float。 字符串型常量 'x' , 字符串常量 '0' ,在ASCII 表中表示的值 为 48。枚举常量 enum boolean {NO,YES}; 。 定义一个常量需要使用关键字 #define MAX 1000 ,这里定义了一个整型常量 MAX 它的值为1000.
2.4 定义变量
可以把相同类型的变量定义在一行中,如:
1 int lower, upper, step; 2 char c, line[1000];
也可以分开定义,以便注释变量的用途,如
int lower; /* comment write here */ int upper; int step; char c; char line[1000];
变量也可以在声明中进行初始化,如
1 char esc = '\\'; 2 int i = 0; 3 int limit = MAXLINE+1; 4 float eps = 1.0e-5;
2.5 数学运算符
加减乘除,模运算。
1 /* + - * / % */ 2 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) 3 printf("%d is a leap year\n", year); 4 else 5 printf("%d is not a leap year\n", year);
2.6 关系运算符
> >= < <= 它们有同样的优先级, == != 它们有相同的优先级。 && || 逻辑运算符的优先级为从左到右。
for (i=0; i < lim-1 && (c=getchar()) != '\n' && c != EOF; ++i) s[i] = c;
i < lim - 1 的表达式计算会优先于 c=getchar() , 因为 && 为从左到右的优先计算规律。
2.7 自增、自减
++i; --i; s[i++]; k[i--];
2.8 位运算
不懂...
2.9 赋值和表达式
利用 + - * / % << >> & ~ ^ | 这些操作符,有的是位操作符,有的是算术操作符与变量结合形成表达式,基本公式如下:
/*------------------- formular */ expr1 = (expre1) op (expre2) ; expre1 op= expre2 ; /*--------------------------------------- */ x *= y+1; // same expression x = x * (y+1); /*--------------------------------------- */
2.10 条件表达式
expr1 ? expr2 : expr3 //formular z = (a > b) ? a : b; /* z = max(a, b) */
附操作符的优先级:
小结:
从这2章来看, php 和 c 有个关键就是数据类型,因为学php,所以对数据类型的概念弱化了,'$' 符号写多了,转向其他语言会不自然的写上 $name = 10; 。而c 不仅变量的申明需要数据类型,函数的定义也需要显式的指明返回的数据类型,函数的定义大概如下:
return_type function_name { // function body
// return ; }
如果函数没有返回它申明的数据类型,或是返回了错误的,又或是返回了不该返回的类型,编译器都不能通过编译,我想这个数据类型就是干学PHP的硬伤,因为我们不需要考虑数据类型,它在内存中所占的大小...等等,久而久之,我们对其他数据结构也会感到陌生和难以理解。
ps:这本书的东西很浓缩,是需要不断地熟悉和练习,才能灵活的使用,理解力不代表动手能力,赶紧得上机练习习题吧,1周1章的进度也不慢了。这书也就9章。
位运算,我完全没概念,先放放吧,从未用过位运算的。