当前位置: 代码迷 >> C语言 >> 关于指针..在线..等...
  详细解决方案

关于指针..在线..等...

热度:232   发布时间:2007-07-28 21:56:16.0
关于指针..在线..等...
main()
{
int a=2,*p=&a,*q=&a;
printf("%d %d ",*p++,*(q++));
p=&a,q=&a;
printf("%d %d",*p,(*q)++);
}      为什么结果是2 2 3 2? 
搜索更多相关的解决方案: 在线  

----------------解决方案--------------------------------------------------------
汗死..哪位高手..帮忙指点下...不盛感激...
----------------解决方案--------------------------------------------------------

* 和 ++ 的优先级相同,而且都是右结合,所以输出 *p++ 和输出 *(q++) 是一样的(p、q 都指向了a).

至于下面那句,记住,实参传递参数给形参的时候是按从右至左的顺序传递的,这里也是一样
即先执行 (*q)++ 再执行 *p 。而(*q)++ 执行完之后a 的值已经变成3了


----------------解决方案--------------------------------------------------------

应该全是2才对。。

++优先级比 * 高 所以*(q++)与*q++无区别

++在后面 所以 是先输出值2然后地址++了

所以只有你最后一个 (*q)++); 才把值2++变成了3

你在最后再加上一句printf("%d",*p); 这句输出是3了




----------------解决方案--------------------------------------------------------

为什么我编译的结果是2 2 2 2


----------------解决方案--------------------------------------------------------
Turbo C运算符的优先次序
━━━━━━━━━━━━━━━━━━━━━━━━━━━━ high
表达式
────────────────────────────
()(小括号) [](数组下标) .(结构成员) ->(指针型结构成员)
────────────────────────────
!(逻辑非) .(位取反) -(负号) ++(加1) --(减1) &(变量地址)
────────────────────────────
*(指针所指内容) type(函数说明) sizeof(长度计算)
────────────────────────────
*(乘) /(除) %(取模)
────────────────────────────
+(加) -(减)
────────────────────────────
<<(位左移) >>(位右移)
────────────────────────────
<(小于) <=(小于等于) >(大于) >=(大于等于)
────────────────────────────
==(等于) !=(不等于)
────────────────────────────
&(位与)
────────────────────────────
^(位异或)
────────────────────────────
|(位或)
────────────────────────────
&&(逻辑与)
────────────────────────────
||(逻辑或)
────────────────────────────
?:(?表达式)
────────────────────────────
= += -=(联合操作)
────────────────────────────
,(逗号运算符) low


----------------解决方案--------------------------------------------------------

变量才能++,常量不能++


----------------解决方案--------------------------------------------------------

楼上是对的.


----------------解决方案--------------------------------------------------------
回复:(vbc)为什么我编译的结果是2 2 2 2
你用的不是TC,是VC++吧?编译器不同,没办法
----------------解决方案--------------------------------------------------------
那为什么*(p++)不会出现内存问题.
----------------解决方案--------------------------------------------------------
  相关解决方案