c语言-count++的问题,++求解答

问题描述

count++的问题,++求解答

#include
int main()
{ int count=0;
printf("%d%d%d
",count++,count++,count++);
}
为什么结果是210?这个++到底是什么时候执行?
另外我将上面输出语句改成count=count++;然后再输出count,结果是0。。。
感觉好混乱,求真正明白的大神讲解

解决方案

首先,这个问题并没有一个标准的答案,依赖于编译器,不同的编译器结果很可能不同
但一般来说有一点是一样的,那就是printf压栈顺序是从右往左,然后根据第一个参数的format里的占位符依次弹栈,匹配占位符进行输出
不用刻意去研究为什么会得到这个结果,只要记住不要在一个表达式对同一个变量多次++,这是一个未定义的行为
如果楼主选定一个编译器了,那么可以继续问,不然没有太大研究的必要
同时,楼主你试试printf("%d%d%d
",count++,count++,++count);打印结果是不是出乎你意料了
哈哈,这里的前++和后++不仅涉及到了是先计算后加1还是先加1再参与计算,还涉及到了有的编译器会将前++会将引用压栈,而有的编译器却不会
PS:后++和前++的区别楼主应该是搞得清楚的吧。。。楼上的反正也解释的很清楚
也可以参考:http://bbs.csdn.net/topics/370153775

解决方案二:

因为表达式先从右边开始执行,所以先执行最右边的count++;count++又是先用count给值,然后++;说以该值为0;然后现在count为1,然后在计算中间那个count++;以此类推就是2,1,0

解决方案三:

是将一个int型累加得到最终结果

解决方案四:

++在参数之后 逗号 之后就执行!!!!!
++在参数之前,逗号 之前就执行!!!!!
但是我推算 应该是012

解决方案五:

在代码中,表达式先从右边开始执行,然后你count++,只后自增(先计算后自增),那么最开始打印是0,然互自增1,然后第二个打印的是2,以此类推最后个自然是3了

解决方案六:

printf("%d%d%d
",count++,count++,count++);
count++ 等价于 count = count + 1;
++在后面,先给出数据后执行++,
从右边开始执行,
count++;先输出对应的 %d 值为 0 ,然后自增一,count = count + 1;值 为 1;
然后对于倒数第二个 count++,现在 count 值为 1,先输出对应的 %d 值为 1,然后自增 count = count + 1;值为 2
对于倒数第三个(正数第一个),count++ ,对应输出现在的值先,即是 %d 对应输出2,然后count = count + 1; 值为 3
到此程序执行完了。最终值 为 3 但输出的不是最终值,二是在 count 自增之前的值

不要和 ++ 在前的混淆

解决方案七:

jQuerry 方面的问题(求解答)
问题怎么解决,求解答,
函数指针问题,求解答

时间: 2024-09-22 10:09:36

c语言-count++的问题,++求解答的相关文章

一道c语言的题目,求解答

问题描述 一道c语言的题目,求解答 有函数原型为void f(int,int *);主函数中有变量定义:int a,*p=&a,b[10];则下列几种调用错误的是: A·f(a,p) B·f(*p,b) C·f(b,&a) D·f(*p,p) 我的想法是:子函数要接收一个整形变量,一个指针变量,那么B选项中b不是指针常量么? 求助大神们解答!谢谢! 答案是C 解决方案 C B中 b 是数组名,可以看作 const 的指针 C中第一个参数是b,但实际参数是 int 解决方案二: B 选项中的

c语言-C语言派寻问题求解答!!!

问题描述 C语言派寻问题求解答!!! 把一个二维实型数组a按照第0列的元素进行排序(由大到小排序,用冒泡法)例如:a[i][0]大于a[i+1][0],则i行与i+1行所有元素都要进行对换 (c语言解答) 解决方案 #include int main() { int num[3][2] = {{5,2},{3,1},{2,9}}; int temp; for(int i = 0;i<3-1; i++) { for(int j = 0;j<3-1-i; j++) { if(num[j][0]&g

c语言-C语言数组定义问题,求解答

问题描述 C语言数组定义问题,求解答 int b; scanf_s("%d", &b); int Array[]; int i; for (i = 0; i<b; i++) { scanf("%d", &Array[i]); } 这个为什么报错呀 解决方案 首先你的数组里面是不确定的,不能定义长度不确定的数组,除非你是用动态内存区定义.应该改为Array[100]或者其他的,其次sacnf后面不应该有_s 解决方案二: 你只是定义了数组, 但是

malloc-C语言字符指针问题求解答

问题描述 C语言字符指针问题求解答 main(){ char * a; a=(char * )malloc(40); scanf(""%s""* a );}上面代码中的scanf(""%s""* a);这行为什么是合法的?请赐教!不好意思第一次代码输错了-_- 解决方案 创建了一个40个字符长度的缓冲区,然后输入字符到这个缓冲区中.你测试下就知道了. 解决方案二: a=(char)malloc(40); 看不懂这要干嘛,怎么不

C语言 神奇算式。求大神解答!!!

问题描述 C语言 神奇算式.求大神解答!!! 标题:神奇算式 由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成. 比如: 210 x 6 = 1260 8 x 473 = 3784 27 x 81 = 2187 解决方案 http://zhidao.baidu.com/link?url=auHsWuamEqBq75Cug4hLrZnoWupqp1H_DLpBxCwmcDJOc2xpCf7ekRWx_YuGqDPp-uuj84RKKPGWeFlPA_UK4BZihp7FBQx3

c语言-C语言函数问题求解答,求大神

问题描述 C语言函数问题求解答,求大神 输入2个整数,分别将其逆向输出,要求定义并调用函数fun(n),它的功能是返回n的逆向值?例如,fun(123)的返回值是321 函数出什么问题了,输出错了 #include #include int fun(int x); int main(void) { int m1,m2; printf("Input m1: "); scanf("%d",&m1); printf("Input m2: ");

c语言-C语言的一个小问题 求解答

问题描述 C语言的一个小问题 求解答 计算机问题求解答">如题 我的代码是这样 #includeint main(){ double xy; printf(""输入数据:""); scanf(""%lf""&x); if(x<1) y=x;else if(x>=1&&x<=10) y=2*x-1;else if(x>10) y=3*x-11;printf(&quo

c语言-我想用定时和外部中断写一个小车避障程序,可是不知道哪里错了,求解答

问题描述 我想用定时和外部中断写一个小车避障程序,可是不知道哪里错了,求解答 5C #include#include#define uint unsigned int#define uchar unsigned charsbit echo=P3^2;sbit trig=P2^3;unsigned char stime; void PWM_zk0(float zk) //高电 平占得比例占空比为(Gao/255){ CCAP0H = CCAP0L =255*(100.0 - zk)/100.0;

磁盘-新手学习C语言文件,问题已经在程序中备注,求解答!

问题描述 新手学习C语言文件,问题已经在程序中备注,求解答! //怎样向文件读写字符 #include #include int main() { FILE * fp; char ch,filename[10]: printf("请输入所用的文件名:"); scanf("%s",filename); if((fp = fopen(filename,"w")) == NULL)//为什么这里的filename没有双引号引起来: { printf(&