赞
踩
()运算符,.运算符,++(后缀)运算符的优先级最高,结合方向均为自左向右。
++(前缀)运算符,*运算符的优先级次之,结合方向均为自右向左。
分析下面这个程序
include <stdio.h>
int main(void)
{
int a = 5, b;
b = a++; /*等价于这两条语句b = a; a = a + 1;*/
printf("a = %d, b = %d\n", a, b);
return 0;
}
猜一猜运行结果会是多少?
没错,运行结果如下:
a = 6, b= 5;
理解了i++后我们再来接着看另一个程序
include <stdio.h>
int main(void)
{ int a = 5, b;
b = ++a; /*等价于这两条语句a = a + 1; b b = a;*/
printf("a = %d, b = %d\n", a, b);
return 0;
}
这个程序的运行结果与上一个会是一样吗?
正确结果如下:
a = 6, b = 6
再来看另一个程序:
#include <stdio.h>
int main(void)
{
int x, y;
x = y = 1;
x++;
++y;
printf("x = %d, y = %d\n", x, y);
return 0;
}
x与y的结果会相等吗?运行结果如下:
x = 2, y = 2
通过以上三个程序可以理解i++与++i:
1、++作为前缀运算符与作为后缀运算符相比,对变量(即运算对象)而言,运算的结果都是一样的,当增1表达式本身的值却是不同的。
2、i++:先使用变量i的当前值作为i++表达式的值,然后再对i进行加1操作。
3、++i:先对变量i进行加1操作,然后将i的值作为表达式i++的值。
4、++(后缀)的优先级高于++(前缀)的优先级。
当p表示一个指针变量指向数组a[5] = {1,3,5,7,9}的首地址时
#include <stdio.h>
int main(void)
{
int a[5] = {1,3,5,7,9};
int *p = a;
printf("*p = %d, p = %p\n", *p, p);
printf("*(p++) = %d, p = %p, ", *(p++), p);
printf("*p = %d\n", *p);
return 0;
}
运行结果如下:
*p = 1, p = 000000000064FE00
*(p++) = 1, p = 000000000064FE04, *p = 3
#include <stdio.h>
int main(void)
{
int a[5] = {1,3,5,7,9};
int *p = a;
printf("*p = %d, p = %p\n", *p, p);
printf("*p++ = %d, p = %p, ", *p++, p);
printf("*p = %d\n", *p);
return 0;
}
运行结果:
*p = 1, p = 000000000064FE00
*(p++) = 1, p = 000000000064FE04, *p = 3
#include <stdio.h>
int main(void)
{
int a[5] = {1,3,5,7,9};
int *p = a;
printf("*p = %d, p = %p\n", *p, p);
printf("(*p)++ = %d, p = %p, ", (*p)++, p);
printf("*p = %d\n", *p);
return 0;
}
运行结果:
*p = 1, p = 000000000064FE00
(*p)++ = 1, p = 000000000064FE00, *p = 2
#include <stdio.h>
int main(void)
{
int a[5] = {1,3,5,7,9};
int *p = a;
printf("*p = %d, p = %p\n", *p, p);
printf("*(++p) = %d, p = %p, ", *(++p), p);
printf("*p = %d\n", *p);
return 0;
}
运行结果:
*p = 1, p = 000000000064FE00
*(++p) = 3, p = 000000000064FE04, *p = 3
#include <stdio.h>
int main(void)
{
int a[5] = {1,3,5,7,9};
int *p = a;
printf("*p = %d, p = %p\n", *p, p);
printf("*++p = %d, p = %p, ", *++p, p);
printf("*p = %d\n", *p);
return 0;
}
运行结果:
*p = 1, p = 000000000064FE00
*++p = 3, p = 000000000064FE04, *p = 3
小白一枚,如有错误,还请纠正。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。