首页投稿(暂停使用,暂停投稿)程序员

# C的指针 分析

2016-05-19  本文已影响166人  伍零一

示例说明不同指针表达式的左右值语义


示例:

char ch='a';
char *cp=&ch;

cp:一个保存ch地址的值.

*cp:指的是cp指向的地址的值。

参照上面的示例,描述一下不同表达式,左值和右值得意义:

表达式 右值 左值
&ch ch的地址 非法
cp cp的值 cp所处的内存位置
&cp 指针变量cp的地址 非法
*cp cp所指向的地址的值 cp所指向的内存位置
*cp +1 cp所指向的地址的值 +1 非法
*(cp +1) cp所指向的位置前进一个 非法
cp++ 先返回cp的一份拷贝,cp的值再加1 非法
++cp cp的值加1后返回cp的拷贝 非法
*++cp cp所指向位置的后面一个值 cp所指向位置的后面一个位置
*cp++ cp所指向位置的值 cp所指向的位置
++*cp 对cp所指向位置的值加1 非法
(*cp)++ 拷贝cp所指向位置的值,并加1 非法
++*++cp 拷贝cp所指向位置后面一个位置的值加1 非法
++*cp++ 指向cp所指向的位置然后加1,产生一份拷贝 非法

注意: 书上说是++比*的优先级要高.但是不要用这个规则来分析上述表达式的语义。

我简单总结:

  1. ++操作符产生一份cp的拷贝
  2. 然后++操作符增加cp的值
  3. 最后在cp的拷贝上进行上执行间接访问操作。
  1. ++操作符增加cp的值
  2. 然后产生一份拷贝
  3. 最后在这份拷贝上执行间接访问操作

学习程序


用指针代替数组存字符串的小demo.

因为C中空间都要事先分配,我表示我也很尴尬.

char *str=(char *)malloc(10);
printf("%d\n",str);
*str='a';
printf("%d———%c\n",str,*str);
*++str='b';
printf("%d———%c\n\n",str,*str);

总结


上一篇下一篇

猜你喜欢

热点阅读