第四章:
1. 条件运算符
int * ptr; if(ptr != 0 && *ptr != 0){} &&运算符当左边为false时,右边的条件语句不执行。
int * ptr; if(ptr == 0 || *ptr != 0){} ||运算符当左边为true时,右边的条件不执行。
利用这两个特性,我们可以把比较危险的语句放在右边,以防止运行时出错。比如,如果ptr == 0; 那么执行 *ptr 的语句就会很危险。然而 &&运算符在 ptr == 0时,不会去执行右边的语句。而是直接返回false。
int m, n, k; if(m != n != k){} 此语句的意义和我们想象的不太一致。语句执行为(m != n) != k,即最后判断k是否和一个布尔值相等。此时只有k不为0或1,条件均为true。肯本不是我们想象的比较三个变量的值是否相等。
int m, n, k; if(m != n && n != k && m != k){} 这个语句才是判断三个变量是否相等的语句。
2. sizeof运算符
sizeof运算符有三种形式:
sizeof(类型名);
sizeof(变量名);
sizeof 变量名;
sizeof返回的是变量或类型的实际字节数。
int a; sizeof(a); 结果为4(假设int占4个字节)
int a[5]; sizeof(a); 结果为20(sizeof应用在数组名上面,返回是整个数组所占字节数)
int a[5]; int * p = a; sizeof(p); 结果为4(p的类型是int *,指针类型在内存中和int所占字节数是一致的)
double a[5]; double *p = a; sizeof(*p); 结果为8(*p表示的是double型元素a[0],其在内存中占字节数为8)
short a; short * p = &a; sizeof(p); 结果为4(指针类型的变量在内存中占4个字节)
short a; short & ref = a; sizeof(ref); 结果为2(sizeof应用在引用上面,返回的是被引用对象所需的长度)
char ch; sizefo(ch); 结果为1(在C++中char型只能占一个字节)
sizefo操作符的值在编译时计算出来的,因此它的值可以当作常量看,可以被用作数组的维数。
3. 赋值表达式和逗号表达式
赋值表达式的值和逗号表达式的值是表达式最右边的值。
int m = 5; 这个表达式的值为5
int m = 8, int n = 0, m = 10; 表达式的值为10