C语言中的加加减减
int main()
{
int i = 8;
printf("%d\n",-(--i));
printf("%d\n",i);
return 0;
}
执行结果:
(i++) + (i++) + (i++)
#include <stdio.h>
(--i) + (--i) + (--i)
--ii先自减1后再参与运算
#include <stdio.h>
int main()
{
int i = 5;
int p = (--i) + (--i) + (--i);
printf("%d\n",p);
printf("%d\n",i);
#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(此时指向第一个元素) *操作取出该值
int main()
{
int a[5] = {1,8,10,5,2};
int *p;
p = a;
printf("%d\n",--*p);
return 0;
}
执行结果:
*(p++):p与++先结合(而不是*)先结合,这个先是运算符跟谁结合在一起而不是时间的先后
p = a;
printf("%d\n",*(p--));
printf("%d\n",*p);
return 0;
}
执行结果:


-i--:i先与负号结合再自减
#include <stdio.h>
int main()
{
int i = 8;
printf("%d\n",-i--);‘
printf("%d\n",i);
retБайду номын сангаасrn 0;
}
执行结果:
-(++i):i先自增再与负号结合
有三个i++,i自增三次后得到i= 8;、
(++i) + (++i) + (++i)
#include <stdio.h>
int main()
{
int i = 5;
int p = (++i) + (++i) + (++i);
#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>
功能: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 a[5] = {1,8,10,5,2};
int *p;
p = &a[1];
printf("%d\n",*--p);
return 0;
}
执行结果:
++*p:先取出p指向的数字,再将这个数字加1
*p = a[0];
*(p)-- = a[0]- 1;
但是因为i++是先参与运算后自增1
所以第一个printf()输出的是*p的值1
第二个Printf()输出的是*p-1的值 0
*++p先将指针p自增1(此时指向第二个元素) *操作取出该值
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;
printf("%d\n",p);
printf("%d\n",i);
return 0;
}
执行结果:
说明:++ii先自增1后再参与运算
先计算(++i)+(++i)首先自增两次i = 7
(++i) + (++i) = 14
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
#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
所以在第二个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++);
而后就变为q = 14 + (++i)
此时的第三个++i自增了三次变为8