功能: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; }
执行结果:
#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; }
执行结果: