| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 514 人关注过本帖, 1 人收藏
标题:关于++的一些问题
只看楼主 加入收藏
shzlw
Rank: 2
等 级:论坛游民
帖 子:11
专家分:14
注 册:2010-10-2
结帖率:33.33%
收藏(1)
已结贴  问题点数:20 回复次数:3 
关于++的一些问题
第一个例子:
#include<stdio.h>
int k,m=3;//全局变量未赋值情况下k=0
void fun(int m)
{      //执行到此的时候K为2
    m+=k;k+=m++;
    printf("%d,%d",k,m);

}
void main()
{
    k++;
    fun(k++);//k=1作为参数,随后k=2为什么不是函数结束才自增呢?
    printf("%d,%d",k,m);
   

}




第二个:
但是在表达式中并不是这样,而是这个表达式结束才自增;
  #include<stdio.h>
void main()
{
    int a=1,b;
        b=(a++)+a;
    printf("%d",b);
}
输出的值为2;并不是3;




第三个
但在逗号表达式中
#include<stdio.h>
void main()
{
    int a=1;
    printf("%d",(a++,a));
}
输出2;说明第二次使用a的时候已经自增,和在函数中一样

有没有很好的结论来说明为什么?还有在其他地方的a++,如if(a++)等等


[ 本帖最后由 shzlw 于 2010-12-13 20:24 编辑 ]
搜索更多相关主题的帖子: 表达式 
2010-12-13 20:19
墨香555
Rank: 2
等 级:论坛游民
帖 子:115
专家分:31
注 册:2010-10-21
收藏
得分:0 
看了这个程序 感觉我的疑问比你还多啊
2010-12-14 22:41
木然
Rank: 1
来 自:杭州
等 级:新手上路
帖 子:6
专家分:1
注 册:2010-12-14
收藏
得分:0 
感觉第一和第三是一个道理吧,单一个a++作为表达式,过后就自动+1,
而第二个b=(a++)+a 作为表达式自然是b=a+a,a+1.
不知道说的对不对
2010-12-14 23:48
venus85
Rank: 6Rank: 6
等 级:侠之大者
帖 子:159
专家分:477
注 册:2010-11-27
收藏
得分:20 
我觉得这个问题可以这样理解
i++和++i,书上的说法是前者先取i的值参与运算,之后i再加1,
后者是先使i加1,再参与运算。问题的关键就在这个“运算”,
如果运算不存在呢,像fun(k++),(a++,a)那么我们是不是可以把
K++,a++等本身当做运算,也就是k++这句执行完后k就会加1。
我觉得这个可以和for循环里面的i++类比,
(i=0;i<n;i++)
i在每执行一次循环体后就加1
i=0时,第一次执行循环体,之后执行i++,i变成1了;
如果按照LZ第一个例子里面的理解,那应该是i还等于0,
而当第二次循环结束的时候,i才会变成1。
实际上for循环里面(i=0;i<n;i++)和(i=0;i<n;++i)是等效的。

也许还可以这样理解,当i不参与运算时,i++和++i是等效的。

[ 本帖最后由 venus85 于 2010-12-15 12:30 编辑 ]
2010-12-15 12:28
快速回复:关于++的一些问题
数据加载中...
 
   



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

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