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;
}
- C 语言中有关常见的运算符问题
- 有关C语言中有符号/无符号数混合运算的小问题
- 有关C语言中有符号/无符号数混合运算的小问题
- 有关C语言中有符号/无符号数混合运算的小问题
- C语言中有关一维数组的一些运算
- 有关C语言运算符优先级和结合律的思考
- c语言中,逗号运算符的问题
- C语言中运算符的优先级问题
- 有关C语言中输入语句的问题
- C语言中有关外部函数调用的问题
- C语言中有关二维数组的指针问题
- c语言运算符的优先级问题
- C语言运算符的优先级问题
- C语言中指针和自增运算符结合时的运算顺序问题
- C语言中指针和自增运算符结合时的运算顺序问题
- C语言中指针和自增运算符结合时的运算顺序问题
- c语言中运算符的优先级
- C语言中运算符的优先级
- 汇编语言字符串大小写翻转转换
- 计算机视觉领域资料
- 关于Nginx的一些优化(突破十万并发)
- SPI时序详解
- 计算机视觉领域的大牛主页
- C 语言中有关常见的运算符问题
- SPI总线协议介绍
- 计算机视觉相关书籍
- 求两个数的最大公约数
- CamShift算法
- .net 数据结构与算法基础:高级排序
- V8 Binding 笔记
- CSS整理
- 第三章 关系模式的规范化设计