C语言中的加加减减

++i  :自增运算符
功能:i 自增1后再参与运算
#include <stdio.h>
 int main()
 {
     int i = 8;
     printf("%d\n",i);
     return 0;
 }


执行结果:


说明:i 先自增1 后i变为9 再将9输出


--i 自减运算符
功能:i自减1后再参与运算

#include <stdio.h>
 int main()
 {
    int i = 8;
    printf("%d\n",i--);
    return 0;
 }  


执行结果:


 

说明:i 先自减1 后再参与运算所以i的值是7

i++ :i参与运算后i的值自增1

#include <stdio.h>
 int main()
 {
     int i = 8;
     printf("%d\n",i++);
     printf("%d\n",i);
     return 0;
 }


执行结果:



说明:因为i先参与运算后值自增1,所以输出的值是8,9;

i--   i参与运算后i的值自减1

#include <stdio.h>
 int main()
 {
     int i = 8;
    printf("%d\n",i--);
    printf("%d\n",i);
 }


执行结果:



说明:因为i 参与运算后i的值自减1,所以输出的结果是8,7


-i++  i先与负号结合再自增

#include <stdio.h>
 int main()
 {
    int i = 8;
    printf("%d\n",-i++);‘
   printf("%d\n",i);
   return 0;
 } 


执行结果:



 说明:i先与负号结合得到-8然后再自增1(输出-8),在第二个输出语句中输出9



-i--:  i先与负号结合再自减

#include <stdio.h>
 int main()
 {
    int i = 8;
    printf("%d\n",-i--);‘
   printf("%d\n",i);
   return 0;
 } 


执行结果:



-(++i):  i先自增再与负号结合

#include <stdio.h>
 int main()
 {
    int i = 8;
    printf("%d\n",-(++i));
   printf("%d\n",i);
   return 0;
 } 


执行结果:


-(--i):  i先自减再与负号结合

#include <stdio.h>
 int main()
 {
    int i = 8;
    printf("%d\n",-(--i));
   printf("%d\n",i);
   return 0;
 } 


执行结果:


(i++) + (i++) + (i++)

#include <stdio.h>
 int main()
 {
     int i = 5;
     int p = (i++) + (i++) + (i++);
     printf("%d\n",p);
     printf("%d\n",i);
     return 0; 
 }


执行结果:


说明:这里的i++是先参与运算后再自增1
所以:p = 5 +5 + 5
有三个i++,i自增三次后得到i= 8;、


(++i) + (++i) + (++i)

#include <stdio.h>
 int main()
 {
     int i = 5;
     int p = (++i) + (++i) + (++i);
     printf("%d\n",p);
     printf("%d\n",i);
     return 0; 
 }


执行结果:



说明:++i  i先自增1后再参与运算

先计算(++i)+(++i)首先自增两次 i = 7
(++i) + (++i) = 14
而后就变为 q = 14 + (++i)
此时的第三个++i自增了三次变为8
q = 14 +8 = 22
i自增了三次变成了8

(i--) + (i--) + (i--)

#include <stdio.h>
 int main()
 {
     int i = 5;
     int p = (i--) + (i--) + (i--);
     printf("%d\n",p);
     printf("%d\n",i);
     return 0; 
 }


执行结果:

 

说明:这里的i--是先参与运算后再自减1
所以:p = 5 +5 + 5
有三个i--,i自减三次后得到i= 2;、

(--i) + (--i) + (--i)
--i  i先自减1后再参与运算

#include <stdio.h>
 int main()
 {
   int i = 5;
   int   p = (--i) + (--i) + (--i);
   printf("%d\n",p);
   printf("%d\n",i);
   return 0;
 }


执行结果:



说明:先计算(--i)+(--i)首先自减两次 i = 3
(--i) + (--i) = 6
而后就变为 q = 6 + (--i)
此时的第三个++i自增了三次变为2
q = 6 +2 = 8
i自减了三次变成了2

*p++先取指针p指向的值,再将指针p自增1 

#include <stdio.h>
 int main()
 {
    int a[5] = {1,8,10,5,2};
    int *p;
    p = a;
    printf("%d\n",*p++);
    printf("%d\n",*p);
    return 0;
 }


执行结果:




说明:*p++先计算*p将*p的值输出后p自增1
所以在第二个printf中打印的是a[1]的值


*p--先取指针p指向的值,再将指针p自减1 

#include <stdio.h>
 int main()
 {
    int a[5] = {1,8,10,5,2};
    int *p;
    p = &a[1];
    printf("%d\n",*p++);
    printf("%d\n",*p);
    return 0;
 }


执行结果:



说明:*p--先计算*p将*p的值输出后p自减1
所以在第二个printf中打印的是a[0]的值


(*p)++ 先取指针p指向的值(以p为内存地址的值),再将该值自增1

#include <stdio.h>
 int main()
 {
    int a[5] = {1,8,10,5,2};
    int *p;
    p = a;
    printf("%d\n",(*p)++);
    printf("%d\n",*p);
    return 0;
 }


执行结果:

 


说明:p = a;
*p = a[0];
*(p)++ = a[0] + 1;
但是因为i++是先参与运算后自增1
所以第一个printf()输出的是*p的值1
第二个Printf()输出的是*p+1的值 2



(*p)-- 先取指针p指向的值(以p为内存地址的值),再将该值自减1

#include <stdio.h>
 int main()
 {
    int a[5] = {1,8,10,5,2};
    int *p;
    p = a;
    printf("%d\n",(*p)--);
    printf("%d\n",*p);
    return 0;
 }


执行结果:

 


说明:p = a;
*p = a[0];
*(p)-- = a[0] - 1;
但是因为i++是先参与运算后自增1
所以第一个printf()输出的是*p的值1
第二个Printf()输出的是*p-1的值 0


*++p先将指针p自增1(此时指向第二个元素) *操作取出该值

#include <stdio.h>
 int main()
 {
    int a[5] = {1,8,10,5,2};
    int *p;
    p = a;
    printf("%d\n",*++p)
   return 0;  
 }


执行结果:


*--p先将指针p自减1(此时指向第一个元素) *操作取出该值

#include <stdio.h>
 int main()
 {
    int a[5] = {1,8,10,5,2};
    int *p;
    p = &a[1];
    printf("%d\n",*--p);
   return 0;  
 }


执行结果:


++*p:先取出p指向的数字,再将这个数字加1

#include <stdio.h>
 int main()
 {
     int a[5] = {1,8,10,5,2};
     int *p;
     p = a;
     printf("%d\n",++*p);
     return 0;
 }


执行结果:



--*p:先取出p指向的数字,再将这个数字减1
#include <stdio.h>
 int main()
 {
     int a[5] = {1,8,10,5,2};
     int *p;
     p = a;
     printf("%d\n",--*p);
     return 0;
 }


执行结果:



*(p++) :p与++先结合(而不是*)先结合,这个先是运算符跟谁结合在一起而不是时间的先后
如 t = *(p++);
等价于 t = *p;p++;
 

#include <stdio.h>
 int main()
 {
    int a[5] = {1,8,10,5,2};
    int *p;
    p = a;
    printf("%d\n",*(p++));
    printf("%d\n",*p);
    return 0;
 }


执行结果:




*(p--) :p与--先结合(而不是*)先结合,这个先是运算符跟谁结合在一起而不是时间的先后
如 t = *(p--);
等价于 t = *p;p--; 

#include <stdio.h>
 int main()
 {
    int a[5] = {1,8,10,5,2};
    int *p;
    p = a;
    printf("%d\n",*(p--));
    printf("%d\n",*p);
    return 0;
 }

执行结果:




  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值