C和指针指针
变量的值就是分配给该变量的内存位置所存储的数值。
int a=112;
int *d=&a;
指针d指向a,但是变量d表示变量a的地址,*d表示a的内容。
++的优先级高于*,*cp++设计3个步骤:
1)++操作符产生cp的一份拷贝
2)++操作符增加cp的值
3)在cp的拷贝上执行间接访问操作
- 指针表达式 P101
char ch='a';
char *cp=&ch;
cp作为右值时,表示的是cp内存储的值,即ch的地址,作为左值时,就是cp的内存位置
&cp作为右值时,是cp的地址,结果的类型是指向字符的指针的指针,但是这个值的存储位置没有清晰定义,所以这个表达式不是一个合法的左值
*cp作为右值时,表示cp所指向内存空间内的值,即ch的值。作为左值时,是ch的地址
*cp+1 首先进行间接防问操作,可以得到ch的值,取得这个值的一份拷贝并把它与1相加,这个表达式的最终结果的存储位置并未清晰定义。
因此只要表达式作为右值时的值的位置是可以确定的,那么它就可以作为左值
cp++ 后缀操作增加cp的值,返回cp值的一份拷贝,这样表达式的值就是cp原来的值的拷贝
*(cp+1) 作为右值时,是ch的下一个位置的内容,作为左值时,是ch的下一个位置的内存地址
总结:作为右值时返回内存中的值,作为左值时,返回指向的地址