nin98 发表于 2015-7-5 21:32:31

++i 的小问题

#include<stdio.h>
int main()
{
        int a=5,b=5,d=0,i=0;
        for(;i<3;i++)
        {
                d=d+(++a);
        }
      printf("%d",d);
        d=(++b)+(++b)+(++b);
        printf("\n%d\n",d);
}
为什么 第一次算的结果是21 第二次结果是22

哥斯拉不说话 发表于 2015-7-5 22:06:32

6+7+8 = 21
7+7+8 = 22

tiandiweicheng 发表于 2015-7-6 15:58:42

++i是先加了1再运算。。。。i++是先运算在加1

mse9591 发表于 2015-7-6 23:33:14

额,我今天专门就这个问题做了个小测试

#include <stdio.h>

void main()
{
        int i=10;
        printf("i的输出结果为:");
        printf("%d\n",i);
        printf("i++的输出结果为:");
        printf("%d\n",i++);                  //i++意为i先参与其他运算之后再自身加1
        printf("++i的输出结果为:");
        printf("%d\n",++i);                  //++i意为i先自身加1再参与其他运算
        printf("i--的输出结果为:");
        printf("%d\n",i--);                  //i--意为i先参与其他运算之后再自身加1
        printf("--i的输出结果为:");
        printf("%d\n",--i);                  //--i意为i先自身加1再参与其他运算
        printf("\n");
        printf("\n");
        printf("\n");
        printf("***********************************\n");
        printf("*****由一个PRINTF函数输出的结果****\n");
        printf("***********************************\n");

       
    printf("i,i++,++i,i--,--i的输出结果为:\n");
        printf("i的输出结果为:%d\ni++的输出结果为:%d\n++i的输出结果为:%d\ni--的输出结果为:%d\n--i的输出结果为:%d\n",i,i++,++i,i--,--i);      
       //由输出结果可以看出printf函数在有多参数的时候由右至左运算
    printf("\n");
        printf("\n");
        printf("\n");
        printf("***********************************\n");
        printf("*****由一个PRINTF函数输出的结果****\n");
        printf("*****调换i和i++的位置之后的结果****\n");
        printf("***********************************\n");

    printf("i++,i,++i,i--,--i的输出结果为:\n");
        printf("i++的输出结果为:%d\ni的输出结果为:%d\n++i的输出结果为:%d\ni--的输出结果为:%d\n--i的输出结果为:%d\n",i++,i,++i,i--,--i);
        printf("\n");
        printf("最终i=%d\n",i);

//        printf("%d",i++);
}

/*------------------------------------------------------
    以上程序运行结果如下:



i的输出结果为:10
i++的输出结果为:10
++i的输出结果为:12
i--的输出结果为:12
--i的输出结果为:10



***********************************
*****由一个PRINTF函数输出的结果****
***********************************
i,i++,++i,i--,--i的输出结果为:
i的输出结果为:10
i++的输出结果为:10
++i的输出结果为:10
i--的输出结果为:9
--i的输出结果为:9



***********************************
*****由一个PRINTF函数输出的结果****
*****调换i和i++的位置之后的结果****
***********************************
i++,i,++i,i--,--i的输出结果为:
i++的输出结果为:10
i的输出结果为:10
++i的输出结果为:10
i--的输出结果为:9
--i的输出结果为:9

最终i=10
Press any key to continue

-----------------------------------------------*/


发现问题:i++,i--在printf函数中并未运算。但是我解释不了   有大神讲解下么

nin98 发表于 2015-7-6 23:58:34

mse9591 发表于 2015-7-6 23:33
额,我今天专门就这个问题做了个小测试

#include


额,输出时都是先写入到一个叫堆得缓冲区中,然后再运算放到堆中的数据
然后牵扯到列队问题,先入后出,后入先出,所以他是倒过来运行的、先 --i得9再i--还是9然后++i这里是将9+1
后缀是在下一次循环是才执行的,接着i++ 还是10,结果回到第一行i还是10

nin98 发表于 2015-7-7 00:03:51

mse9591 发表于 2015-7-6 23:33
额,我今天专门就这个问题做了个小测试

#include


我都没想到要那么做,才能得到结果,看完这程序。瞬间懂了
谢谢了哈

mse9591 发表于 2015-7-7 02:12:26

nin98 发表于 2015-7-7 00:03
我都没想到要那么做,才能得到结果,看完这程序。瞬间懂了
谢谢了哈

额……客气
新手一个!好多都还不懂呢……{:1_1:}
页: [1]
查看完整版本: ++i 的小问题