C 语言中有关常见的运算符问题

来源:互联网 发布:买房最好的软件 编辑:程序博客网 时间:2024/04/29 16:16

            
  最近在CSDN 论坛上看到有关运算符的问题,其实运算符最典型的问题就是优先级和自加运算和自减运算。
  运算符的优先级顺序,从高到底依次是:
  初等运算符(),[],->.
  单目运算符!,~,++,--,-,*,sizeof
  算术运算符+,-,*,/,%
  关系运算符>,<,!=,==,>=,<=
  逻辑运算符&& ,||
  条件运算符?:
  赋值运算符=,+=,-=,*=,/=,%=,《=,》=,&=,
  逗号运算符,
  同一优先级的运算符优先级相同,运算次序由结合方向决定,其中单目运算符,条件运算符,赋值运算符的结合方向从右向左,其他运算符的结合方向从左向右。
  注意‘=’表示取值,而‘==’表示判断相等。
  经常容易有问题的就是增量运算符++,和减量运算符--,增量运算符就是给变量加1,有两种形式,前缀++i,后缀i++,(注意j=i++,是先赋值,后运算,j=++i,表示先运算,后赋值),前缀和后缀的区别在于这一动作执行的准确时间是不同的。
  自减运算符和自加运算符很相似,不再多说。
  在举一个在指针运算中经常遇到的问题。
  例如:total+=*start++;
  一元运算符*和++运算符具有相同的优先级,但在结合时是从右向左进行的,这就意味着++应先于start,而不是应用于*start,也就是说,是指针自增1,而不是指针所指向的数据自加1,后缀形式(即start++,而不是++start)表示先把指针指向数据加到total,然后指针自加1,如果程序使用* ++start,则顺序就变为指针先加1,然后在使用其指针指向的值,然而如果程序使用了(*start)++,那么会使用start所指向的数据,然后该数据自增1,这样,指针所指向的地址不变,但其中的与元素却变成一个新数据。

#include <stdio.h>
#define SIZE 10
int sum(int *start,int *end);
int main(void)
{
int marbles[SIZE] ={20,10,5,39,4,16,19,26,31,20};
long answer;
answer = sump(marbles ,marbles+SIZE);
printf("The total number is %ld \n",answer);
return 0;
}
int sump(int *start,int *end)
{
int total =0;
while(start < end)
{
total +=*start;
start++;
}
return total;
}