k++后第二次k不是6吗 还有i++啥意思

以下程序的输出结果是
m=4,k=4,i=5,k=5

#include <stdio.h>
int k=0;
void fun(int m)
{
m+=k;k+=m;
printf("m=%d,k= %d ",m,k++);
}
void main()
{
int i=4;
fun(i++);
printf("i=%d,k=%dn",i,k);
}

自己写了一下解析:
int k=0; 定义了一个全局变量k 赋值为0
接着从void main()函数看起,
首先定义了一个整数类型变量i 并将其赋值为4 即:int i=4;
然后调用fun()函数,传参i++,即:fun(i++) 然后说明一下i++ i++其实就是自增运算,每次相关语句执行结束后 自增1
调用了fun()函数,我们视角走向fun()函数部分
void fun(int m) i++传给了m 此时m=4
m+=k; 即m=m+k; m=4 k=0 所以 m=m+k=4
k+=m; 即k=k+m; m=4 k=0 所以k=k+m=4
然后printf输出 m=4,k=4 函数执行结束,k自增1 k=5 紧接着回到主函数调用结束 即fun(i++)语句结束,此时i自增1,i =5
所以在主函数输出i=5,k=5
希望对题主有所帮助,望采纳!!

i++是先取i的值,然后i=i+1,所以fun(i++)相当于 fun(i);i=i+1,i初值为4,所以fun(4); i=i+1=5;
在fun(4)里,m=m+k=4+0=4;k=k+m=0+4=4,输出k++也是先输出k的值,然后k=k+1,所以fun(4)输出m=4,k=4,然后k=k+1=5
接着main输出i=5,k=5

  1. 外部定义了k=0,main函数定了i=4;(k=0,i=4)
  2. 调用fun函数传入i++,i++表示先使用i的值,后执行++
  3. 也就说传入到fun函数的4,但是传入的同时执行了++,所以这个时候m=4,i=5(m=4,i=5)
  4. fun内部执行m+=k;前边三步,k=0,m=4;所以执行完成m=4+0=4;(k=0,m=4)
  5. k+=m;执行,(k=0,m=4),所以 k=0+4=4;(k=4,m=4)
  6. printf("m=%d,k= %d ",m,k++);此处注意k++是先使用k的值,再执行++,所以先输出m,k也就是4,4;然后k执行++,此时(k=5)
  7. fun函数执行完成,执行下一句printf("i=%d,k=%dn",i,k);找到前6步的i和k的最后值5,5
  8. 所以输出是:(4,4 )/(5,5)