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的下一个位置的内存地址

 

总结:作为右值时返回内存中的值,作为左值时,返回指向的地址

posted @ 2013-04-19 11:43  我爱写程序  阅读(173)  评论(0编辑  收藏  举报