1.C语言中前置++i和后置i++的区别
- 在for循环语句中前置++是用i加后的值与条件比较,这个过程中 不需要开辟临时空间;
- 而后置++则是先将i取出来放在一个临时开辟的空间里 ,用这个临时量与条件做比较,然后i自增;
- 前置++比后置++效率高,因为不必开辟临时空间。
2.++*p,*p++,*++p的区别
清楚了前置++和后置++的区别无疑对我们要解决的这个问题至关重要,接下来通过一段代码来体会一下三者的区别
#include<stdio.h>
int main()
{
int a[10] = {21,23,45,32,66,34,12,56,90,33};
int *p = &a[2];
int x = ++*p;
int y = *p++;
int z = *++p;
printf("%d,%d,%d\n",x,y,z);
return 0;
}
程序运行后的结果为: 46,46,66
说明:由于自增运算符与指针运算符优先级相同,c语言中规定它们的结合方向是从右向左,则
(1)++*p则是指针运算符与p先结合,*p指向a[2]这个地址空间,a[2]里面的值是45,则++*p实质是++a[2],所以结果为46;
(2)*p++是把p所指a[2]的地址先取出来放在一个临时空间,然后用取出来的临时量与*结合,则结果为46。此时p指向下一个地址空间,也就是a[3]的地 址;
(3)*++p则是先执行自增,由于p里面已经存放的是存放a[3]的地址,++p则指向存放a[4]元素的地址,所以*++p的结果为66