*q++与(*q)++的区别

a266328633 2012-09-16 03:34:40
*q++与(*q)++的区别
...全文
3390 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ydc__ 2012-09-18
  • 打赏
  • 举报
回复
不知道 百度 吗 ?
li89 2012-09-18
  • 打赏
  • 举报
回复
清楚明了


[Quote=引用 19 楼 的回复:]
*q++:整个表达式返回q所指对象。该语句执行之后,q指向下一个对象
(*q)++:整个表达式返回q所指对象。该语句执行之后,q所指向对象加1,q本身不变(仍指向原来对象,只是这个对象的值已经加1)
[/Quote]
SKATE11 2012-09-17
  • 打赏
  • 举报
回复
楼上都说清楚了 结贴给分吧
northcan 2012-09-17
  • 打赏
  • 举报
回复
*q++:整个表达式返回q所指对象。该语句执行之后,q指向下一个对象
(*q)++:整个表达式返回q所指对象。该语句执行之后,q所指向对象加1,q本身不变(仍指向原来对象,只是这个对象的值已经加1)

赵4老师 2012-09-17
  • 打赏
  • 举报
回复
无对应汇编,无真相!
yimingxinshou 2012-09-17
  • 打赏
  • 举报
回复 1
*p++是先取p指向的数据,然后 p加一,(*p)++是取p指向的数据后,这个数据加一
thefutureisour 2012-09-17
  • 打赏
  • 举报
回复
前面已经说得比较清楚了,要是实在记不住操作的运算顺序,就使用括号吧,这样是最保险的。
__phoenix 2012-09-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

*q++ 取得q所指向的对象,q指向下一个对象
(*q)++ 递增q所指向的对象
[/Quote]

++
yrnaaa 2012-09-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
*q++与(*q)++的区别
[/Quote]
*q++ 去*q的值,然后q++;
(*q)++,取*q的值,值++;
wizard_tiger 2012-09-17
  • 打赏
  • 举报
回复
LS都说了,学习一下。
lxn2577 2012-09-17
  • 打赏
  • 举报
回复
后者可读性更好
Topseten 2012-09-17
  • 打赏
  • 举报
回复
按理解++和*是同一优先级的,都是右结合性的
所以在同一行表达式下,输出结果是一样的
但是不同表达式下q所指向的内容变了
例如
int main(int argc,char * argv[])
{
int a[] = {5,1,3,4};
int *q = a;
printf("%d\n",(*q)++); //输出结果为 5 6
//printf("%d\n",*q++); //输出结果为 5 1
printf("%d\n",*q);
}

上面代码中最后的printf的输出结果是不一样的
jaedongjuly 2012-09-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
6楼没错, 1楼, 7/8楼错了才对. ++ 和 * 的优先级是一致的.
参考: http://www.slyar.com/blog/c-operator-priority.html

其实,好像没什么难理解的吧? 对于 ++ 和 * 来说,其方向都是从右到左.
(*q)++ 就无需说了,先 *q , 在对 *q 的值进行 ++ .

*q++ 呢? 由于运算等级相同,所以优先考虑结合……
[/Quote]

解释的很清楚,学习了
a707000646 2012-09-17
  • 打赏
  • 举报
回复
运算符优先级问题
真田幸村 2012-09-17
  • 打赏
  • 举报
回复
整天搞这种东西 嘬死呢? 又不能体现你水平。吃饱了撑的。。
也没见会这东西 就能做出好产品,
还不滚回去debug
猴头 2012-09-17
  • 打赏
  • 举报
回复
。。。。。。一般就是windows下的吧。。。。。。

就按windows下的运算顺序来回答得了

[Quote=引用 18 楼 的回复:]

无对应汇编,无真相!
[/Quote]
ForestDB 2012-09-16
  • 打赏
  • 举报
回复
*q++ 取得q所指向的对象,q指向下一个对象
(*q)++ 递增q所指向的对象

yulinlang 2012-09-16
  • 打赏
  • 举报
回复
在C/C++标准里,后缀++,--操作符作为postfix expressions和{},[],(),.,->等分在一组,结合性是由左至右
前缀++,--操作符作为unary expressions和*,&,sizeof,new等分在一组,结合性是由右至左。
postfix expressions的优先级比unary expressions高一级。

所以*q++等效与*(q++)。

认为相同的,请参考:
ISO/IEC 9989:1999 Programming languages - C 6.5 Expressions
ISO/IEC 14882 Programming languages - C++ 5 Expressions
C语言参考手册第五版 P146 表7.3 C语言运算符
C Prime Plus 第五版 P572 表B.1 C运算符
C和指针 P81 表5.1 操作符优先级
C语言程序设计:现代方法第二版 P524 C语言运算符
C++程序设计语言特别版 P107 6.2 运算符概览
C++ Primer中文版(第4版) P147 表5-4 操作符的优先级
http://c-faq.com/ptrs/unopprec2.html
http://c-faq-chn.sourceforge.net/ccfaq/node51.html
http://www.cplusplus.com/doc/tutorial/operators/
http://en.cppreference.com/w/cpp/language/operator_precedence
http://msdn.microsoft.com/en-us/library/126fe14k(v=vs.80).aspx
http://zh.wikipedia.org/zh-cn/C%E5%92%8CC%2B%2B%E9%81%8B%E7%AE%97%E5%AD%90

mujiok2003 2012-09-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
++ 优先级高于*, 两者等价,但是(*q)++的可读性性更好,因为我们不用知道谁的的优先级更高。

C/C++ code

int a[6] = {0};
int * q = a;
*q++; // 表达式的值a[0], q的值为&a[1]
[/Quote]

我错了。 ++和*的优先级相同。

*q++; // q =q + 1, 表达式的类型是地址(比如,int*,在下面的例子)

int a[] = {1,2,3,4,5};
00ED3508 mov dword ptr [a],1
00ED350F mov dword ptr [ebp-18h],2
00ED3516 mov dword ptr [ebp-14h],3
00ED351D mov dword ptr [ebp-10h],4
00ED3524 mov dword ptr [ebp-0Ch],5
int *q = a;
00ED352B lea eax,[a]
00ED352E mov dword ptr [q],eax
*q++; // q指向a[1]
00ED3531 mov eax,dword ptr [q]
00ED3534 add eax,4
00ED3537 mov dword ptr [q],eax
}


(*q)++; //q不变化,q所指的内容自增,表达式的值为*q自增之前的值

{
int a[] = {1,2,3,4,5};
00ED353A mov dword ptr [a],1
00ED3541 mov dword ptr [ebp-40h],2
00ED3548 mov dword ptr [ebp-3Ch],3
00ED354F mov dword ptr [ebp-38h],4
00ED3556 mov dword ptr [ebp-34h],5
int *q = a;
00ED355D lea eax,[a]
00ED3560 mov dword ptr [q],eax
(*q)++; //q的值不变,a[0] = 2
00ED3563 mov eax,dword ptr [q]
00ED3566 mov ecx,dword ptr [eax]
00ED3568 add ecx,1
00ED356B mov edx,dword ptr [q]
00ED356E mov dword ptr [edx],ecx
}
代码研究所 2012-09-16
  • 打赏
  • 举报
回复
谁能告诉我 q++与(*q)++ 是什么意思啊,表达式吗?
加载更多回复(10)

33,311

社区成员

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

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