| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 525 人关注过本帖
标题:请教大家一个问题啊
只看楼主 加入收藏
skywalker_
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-1-24
结帖率:100%
收藏
已结贴  问题点数:2 回复次数:2 
请教大家一个问题啊
a+b*c,编译器扫描到+后继续扫描,碰到*,因为*优先级高,所以先执行*后执行+.
c=i++,编译器扫描到=后继续扫描,碰到++,++优先权高,所以该先执行++再赋值。
然而书上还说该式是先赋值后自增的,i++是后自增,实际运行结果也说明赋值后才自增的。
这不是矛盾了吗?
期待高人,这个问题问了100个人了,没一个完美的解释。
搜索更多相关主题的帖子: 编译器 优先级 优先权 矛盾 
2010-01-28 18:55
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:2 
并不是赋值以后才进行自增运算的!
1.i++,++i是增1运算其运算对象是i
2.c=i++;含义是把(i++)赋给c,这两行应该可以理解
3.(i++)是多少呢?实际上这有两个结果,一个是对i的增1,另一个是i++的结果(是原来的i值)
下面add1函数的第二参数为0时为++在变量右,非0时++在变量左.(仅供参考,欢迎指正)
#include <stdio.h>
int add1(int *p, int b);

int main(int argc, char* argv[])
{
    int i=5,j=5;
    int c,d;
    c=add1(&i,0);    //相当于c=i++;
    printf("i=%d\n",i);
    printf("c=%d\n",c);
    d=add1(&j,1);    //相当于d=++j;
    printf("j=%d\n",j);
    printf("d=%d\n",d);
}
int add1(int *p, int b)
{
    int x;
    x=((b==0)?(*p)++:++(*p));
    return x;
}

[ 本帖最后由 cnfarer 于 2010-1-29 07:45 编辑 ]

★★★★★为人民服务★★★★★
2010-01-28 20:56
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
i++ 是在i使用后+1的   使用可以使赋值,调用等  
例如
int i=1;
int j=i++;
cout<<i<<"  "<<j<<endl;
输出 i=2  j=1;  你可以试试

                                         
===========深入<----------------->浅出============
2010-05-30 16:01
快速回复:请教大家一个问题啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015205 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved