您好, 访客   登录/注册

C语言中自增自减运算符的深入剖析

来源:用户上传      作者:

  【摘要】本文从多方面对自增自减运算符分析、讲解,以便让初学者能够清晰自增自减运算符的运算规律,学会其灵活的用法,扫清学习C语言的一个障碍。
  【关键词】C语言,运算符,自增自减,结合性
  在众多的计算机程序设计语言中,C语言以其灵活性和实用性受到广大计算机应用人员的喜爱,并且也成为许多高职院校计算机专业类学生的必修课程。C语言中自增自减运算符由于使用非常灵活,成为了初学者学习C语言的难点之一。下面我从几个方面来剖析一下自增自减运算符的应用。
  1自增自减运算符基本应用
  C语言中提供了自增(++)、自减(--)运算符。它们的作用是使被操作变量值增加1或减少1。
  自增(自减)运算符写在变量的前面称为前置自增(减),如++i,--i,写在变量的后面称为后置自增(减),如i++,i--。
  1)前置自增(自减):变量i先自增(自减)1,然后再使用变化后i的值。
  2)后置自增(自减):先使用变化前变量i的值,然后i再自增(自减)1。
  例一:int i=3,j=3;
  i++;++j;
  printf("%d,%d\n",i,j);
  结果:4,4。若第2行语句改成自减语句i--;和--j;其结果:2,2。
  2自增自减运算符的实战应用
  2.1在赋值语句中的应用
  赋值语句中,前置式自增自减,先进行自增自减运算,再进行其它运算;后置式,先进行其它运算,后进行自增自减运算。
  例二:int i=3,j=3,a,b;a=++i;b=j++;
  printf("%d,%d,%d,%d\n",a,b,i,j);
  结果:4,3,4,4。若第2行语句改成自减语句a=--i;b=j--;其结果:2,3,2,2。
  分析:“++前置”:i自增1后变为4再参与赋值运算,则a=4,i=4;“++后置”:j先参与赋值运算,把3赋值给b后,j的值再自增1变为4,则是b=3,j=4。
  2.2在循环结构中的应用
  C语言程序设计提供了三种循环:for循环、while循环、do…while循环。
  在for循环中,for语句最简单的应用形式也可理解为如下形式:for(循环变量赋初值;循环条件;循环变量增值){<循环体>}
  其中循环变量增值语句一般用自增(自减)运算符来实现。如“i++”或“i--”,其中i称为循环变量。循环中一般只注重循环变量的值,而不注重循环变量所在表达式的值,所以自增(自减)的前置和后置作用相同。
  例三:int sum=0,i=0;
  for(;i<=100;i++)
  sum=sum+i;
  分析:循环结构中的i++作用:通过循环变量不断加1,使循环条件趋于不满足。
  在while和do…while结构中,自增自减运算符一般放于循环体中。
  2.3在函数调用中的应用
  若自增自减运算符用于函数实参表达式,则函数执行过程是将实参表达式值按照从右至左的顺序入栈,入栈前就将实参表达式的值计算完毕。因此,如果函数有多个参数,则它们是按照从右至左的顺序计算。
  例四:mul(int a,int b)
  {printf("%d\n",a*b);}
  main()
  {int i=3;mul(i,++i); }
  结果:16。
  分析:在调用语句mul(i,++i)中,按从右至左的顺序计算,相当于mul(4,4)。
  2.4在指针中的应用
  在C语言中,指针指向一定的数据对象时,可以前后移动来指定新的对象,这时就可以通过自增自减运算符来实现,主要作用是用来修正地址。
  例五:int a[10]={1,2,3,4,5},*p=a;
  for(;p  结果:1 2 3 4 5
  分析:p=a,将指针指向a[0]的地址,p++,指针向后移动指向下一个元素的地址。
  3自增自减运算符的注意事项:
  3.1自增自减运算符只能作用于变量。自增自减运算符都是单目运算符,即只能对一个变量施加运算,运算结果仍赋予该变量,不能用于常量或表达式中。(a+b)++、3++等运算是错误的。
  3.2自增自减运算符的结合性。自增自减运算符为“右结合”,就是从右到左依次计算。表达式-i++,相当于-(i++),若变量i为3,则表达式结果是-3。
  3.3多运算符的分配问题。若出现多个运算符相连,分配原则是:自左至右尽可能多的将若干个字符组成一个运算符,如表达式i+++j应当分配成(i++)+j。
  3.4自增自减运算符的重复出现问题
  在表达式中出现多个相同的自增自减运算符时,运算过程和单个自增自减是不同的。
  例六:int i,p;
  i=3;p=(i++)+(i++)+(i++);printf("p=%d,i=%d\n",p,i);
  i=3;p=(++i)+(++i)+(++i);printf("p=%d,i=%d\n",p,i);
  结果:p=9,i=6; p=16,i=6
  分析:在第2行语句p=(i++)+(i++)+(i++)中,自增运算作为后置式,变量i本身先参加算术运算,即p=3+3+3=9,再按照“自右至左”的结合性进行自增运算,最后i的值为6。说明后置式自增运算符“先使用后改变”的“改变”是指在下一条语句执行前统一改变,而不是刚用完就变。
  第4行语句在VC环境下表达式p=(++i)+(++i)+(++i),相当于p=(((++i)+(++i))+(++i)),最后i的值为6。但在TC环境下,先按照“自右至左”的结合性进行自增运算,i的值变为6,再进行加法运算,即18。
  4总结
  以上探讨了自增自减运算符在C语言程序中多个方面的应用,希望对理解和使用自增自减运算符能有所帮助,从而为学好这门重要的语言课程打下扎实的基础。
转载注明来源:https://www.xzbu.com/2/view-11592878.htm