char ch = 'a';
char *cp = &ch;
让指针指向数组中的最后一个元素是合法的,但对它进行间接访问操作可能会失败。
ANSI C标准允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针进行比较,但不允许与指向数组第一个元素之前的那个内存位置进行比较。
1. *cp+1
*
操作符的优先级高于+
,所以首先执行间接访问操作。我们可以得到它的值,我们取得这个值的一份副本并把它与1相加,表达式的最终结果为’b’。
这个表达式的最终结果的存储位置并未清晰定义,所以它不是一个合法的左值。
2. ++a和a++
在操作数之前的操作符在变量被使用之前增加它的值;
在操作数之后的操作符在变量被使用之后增加它的值;
int a,b,c,d;
a = b = 10;
c = ++a; //a增加至11,c得到的值为11
d = b++; //b增加至11,d得到的值为10
++a的结果是a值的副本,并不是变量本身,因此无法向一个值进行赋值操作。
++a = 10; //非法
3. ++cp
表达式的结果是