关于指针的关系运算

water_alliance 2009-05-07 09:00:39
有定义:
int a[5]={100,200,300,400,500},*pl=&a[0],b;
希望大家能详细解释以下运算过程:(我有点乱)
1)pl=&a[0],b=*pl++;
2)pl=&a[0],b=*++pl;
3)pl=&a[0],b=(*pl)++;
4)*(pl++);
5)pl=&a[1],b=++*pl;
...全文
147 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
water_alliance 2009-05-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhourenyun 的回复:]
多写点程序,慢慢体会,现在别人跟你讲明白不重要,重要的是应用的时候边体会边写。
另外就是
所谓的指针其实就是一个地址而已。
再加上运算法的优先级。这两点明白了 其实好多问题都不难解决。
[/Quote]
我想指针与地址是有区别的吧,不能混为一谈,地址只能定位存储单元的开始位置,而指针的值代表存储单元的地址,它的类型代表存储单元占用多少个连续字节内存单元。
pathuang68 2009-05-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liliangbao 的回复:]
C/C++ code1)pl=&a[0],b=*pl++;
b = *pl,pl++;即b = 100, pl = &a[1]

2)pl=&a[0],b=*++pl;
pl++, b = *pl;即b = 200, pl = &a[1]

3)pl=&a[0],b=(*pl)++;
b = *pl,(*pl)++;即b = 100, *pl = 101

4)*(pl++);
*pl, pl++;

5)pl=&a[1],b=++*pl;
(*pl)++, b = *pl;即b = 201, pl = &a[1]
[/Quote]
正解!
ZWHLOVEPRO 2009-05-07
  • 打赏
  • 举报
回复
主要是*和++的优先级问题。再次就是前置++和后置++的区别。
前置++返回的是自加之前的值,而后置++返回的是自加之后的值。
把这两个问题搞清楚了相信你就不会乱了。
zhourenyun 2009-05-07
  • 打赏
  • 举报
回复
多写点程序,慢慢体会,现在别人跟你讲明白不重要,重要的是应用的时候边体会边写。
另外就是
所谓的指针其实就是一个地址而已。
再加上运算法的优先级。这两点明白了 其实好多问题都不难解决。
zysmiracle 2009-05-07
  • 打赏
  • 举报
回复
3楼正解
liliangbao 2009-05-07
  • 打赏
  • 举报
回复
1)pl=&a[0],b=*pl++; 
b = *pl,pl++;即b = 100, pl = &a[1]

2)pl=&a[0],b=*++pl;
pl++, b = *pl;即b = 200, pl = &a[1]

3)pl=&a[0],b=(*pl)++;
b = *pl,(*pl)++;即b = 100, *pl = 101

4)*(pl++);
*pl, pl++;

5)pl=&a[1],b=++*pl;
(*pl)++, b = *pl;即b = 201, pl = &a[1]


lingyin55 2009-05-07
  • 打赏
  • 举报
回复
++和*是同一优先级的,结合性为从右到左,而括号的优先级是所有操作符最高的。
自己看一下就明白上面那些计算了
pengzhixi 2009-05-07
  • 打赏
  • 举报
回复
int a[5]={100,200,300,400,500},*pl=&a[0],b; //pl指向a[0]
希望大家能详细解释以下运算过程:(我有点乱)
1)pl=&a[0],b=*pl++; //b等于a[0]的值,同时,pl指向p1
2)pl=&a[0],b=*++pl; //pl指向a[0],*++pl等效于++pl;*pl所以b的值为a[1]的值
3)pl=&a[0],b=(*pl)++; //(*pl)++等效于(*pl)+1;也就是说b=a[0]+1;
4)*(pl++); //和1)一样
5)pl=&a[1],b=++*pl;和3一样

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧