C语言难点一:printf多个变量输出计算次序中的自增与自减

devc++下

#include

int main(){
	 
	//关于printf中变量的输出次序以及自增自减
	int i=1;
	printf("%d,%d,%d,%d\n",i++,++i,i++,++i); //4,5,2,5 
	printf("%d\n",i); //5 
	i=1;
	printf("%d,%d,%d,%d\n",++i,++i,++i,++i);  //5,5,5,5 
	printf("%d\n",i); //5
	i=1;
	printf("%d,%d,%d,%d\n",i++,i++,i++,i++);  //4,3,2,1 
	printf("%d\n",i); //5 
	/*由上可以总结出:
	  一个printf输出多个数据时是从右往左计算,
	  并且++i的值是等所有的i=i+1执行完才输出最终结果i,
	  而i++是根据当前计算所得i=i+1输出
	*/ 
	
	i=5;
	printf("%d,%d,%d,%d\n",i--,--i,i--,--i); //2,1,4,1 
	printf("%d\n",i); //1 
	i=5;
	printf("%d,%d,%d,%d\n",--i,--i,--i,--i);  //1,1,1,1 
	printf("%d\n",i); //1
	i=5;
	printf("%d,%d,%d,%d\n",i--,i--,i--,i--);  //2,3,4,5 
	printf("%d\n",i); //1  
	/*由上可以总结出:--i与++i的处理相同,i--与i++的处理相同*/ 
	
	//关于printf中指向变量的指针的输出次序以及自增自减
	int *pi=&i;
	printf("%d,%d,%d,%d\n",(*pi)++,++(*pi),(*pi)++,++(*pi)); //4,4,2,2 
	printf("%d\n",i); //5 
	i=1;
	printf("%d,%d,%d,%d\n",++(*pi),++(*pi),++(*pi),++(*pi));  //5,4,3,2 
	printf("%d\n",i); //5
	i=1;
	printf("%d,%d,%d,%d\n",(*pi)++,(*pi)++,(*pi)++,(*pi)++);  //4,3,2,1 
	printf("%d\n",i); //5 	 
	/*由上可以总结出:
	  !!!!对于*pi的自增与变量i的自增时不同的
	  指针*pi无论是++(*pi)还是(*pi)++都是及时执行自增,再从右往左计算下一个输出
	  不会像变量的++i等到所有的自增执行完再输出最终的结果 
	*/
	
	//关于printf中指向数组的指针的输出次序以及自增自减
	int b[4]={1,2,3,4};
	int *p=b;
	printf("%d,%d,%d\n",*p++,*p++,*p++); //3,2,1 
	p=b;
	printf("%d,%d,%d\n",*++p,*++p,*++p); //4,3,2
	/*由上可以总结出:指向数组的指针和指向变量的指针输出类似 */ 
	
	return 0;	
}

你可能感兴趣的:(C语言)