![](https://wzf2000.top/wp-content/uploads/教程/unnamed-file.C/4-1532x1095.jpg)
C/C++ 语法教程(4)——运算符优先级与常用函数
Contents [hide]
运算符优先级与常用函数
C/C++ 运算符优先级关系
优先级越小越优先。
优先级 | 类别 | 运算符 | 结合性 |
---|---|---|---|
1 | 后缀 | () [] -> . ++ - - | 从左到右 |
2 | 一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
3 | 乘除 | * / % | 从左到右 |
4 | 加减 | + - | 从左到右 |
5 | 移位 | << >> | 从左到右 |
6 | 关系 | < <= > >= | 从左到右 |
7 | 相等 | == != | 从左到右 |
8 | 位与 AND | & | 从左到右 |
9 | 位异或 XOR | ^ | 从左到右 |
10 | 位或 OR | | | 从左到右 |
11 | 逻辑与 AND | && | 从左到右 |
12 | 逻辑或 OR | || | 从左到右 |
13 | 条件 | Condition?x:y | 从右到左 |
14 | 赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
15 | 逗号 | , | 从左到右 |
但是其实一般不需要记得这么准确,毕竟疯狂加括号肯定不会有错嘛。
一些常用函数
这些函数蛮多都涉及了后面的知识,所以这里主要是先给出来。
C 标准库
string.h
(C++ 就用cstring
):(size_t
一般就是unsigned int
)memset(void *s, int c, size_t n)
:将已开辟内存空间 s 的首 n 个字节的值设置为 c。看似很难理解,但你一般只需要知道用memset(a,0,n*sizeof(int))
表示将a[]
的a[0]~a[n-1]
赋值为 0 即可(a[]
是int
数组)。(a[1]~a[n]
只需要改为a+1
)。当然一般只用于字符数组,这样就不用sizeof
,因为本身就只占一个字节。(较常用)memcpy(void *dest, const void *src, size_t n)
:将以 src 开头,长度为 n 的内存空间里的内容拷贝到以 dest 开头的内存空间里去。一般用于数组复制,比如memcpy(a,b,n*sizeof(int))
指将 b 的前 n 个元素复制到 a 的前 n 个位置。(同样都是int
数组)(较常用)strcpy(char *dest, const char *src)
:把从 src 地址开始且含有 NULL 结束符的字符串复制到以 dest 开始的地址空间。与memcpy
相似,但是只用于char
数组,并且通过结束符(\0
)控制长度。strncpy(char *dest, const char *src, int n)
:把 src 所指的字符串中以 src 地址开始的前 n 个字节复制到 dest 所指的空间中。注意:- 如果 src 中字符数大于等于 n,则 dest 中不含有
\0
; - 否则,将以
\0
填充 dest 到完成 n 个字节。
- 如果 src 中字符数大于等于 n,则 dest 中不含有
strcat(char *dest, const char *src)
:将这两个char
数组顺序连接,结果放在 dest 中。getline(istream &is, string &str, char delim)
:几乎无用,而且涉及输入输出流,不讲。size_t strlen(const char *string)
:计算string
字符串或者以char *
声明的字符数组的长度。(较常用)
ctype.h
(C++ 就用ctype
):(我基本没有听说过)tolower()/toupper()
:改变字母大小写。isalpha(),isdigit(),isprint()
:用于判断字符是否是字母,数字,可打印字符(非控制字符)。
math.h
(C++ 就用cmath
):double pow(double x, double y)
:返回 xy。double floor(double x)
:返回 x 下取整。注意返回是double
。double ceil(double x)
:返回 x 上取整。注意返回是double
。int abs(int x)
:返回 x 的绝对值。double fabs(double x)
:同理。但在包含了头文件cstdlib
后abs
也可用于浮点型。sin(),cos(),tan()
:三角函数,注意给定参数应该是弧度制。asin(),acos(),atan()
:反三角函数,注意返回值是弧度制。sinh(),cosh(),tanh()
:双曲函数。double exp(double x)
:返回 ex。double log(double x)
:返回 lnx。double sqrt(double x)
:返回 √x。
C++ STL
algorithm
:min(),max()
:返回较小较大值。(较常用)lower_bound()/upper_bound()
:一般用lower_bound(a,a+n,x)-a
查找有序(升序)数组a[0~n-1]
中第一个大于等于 x 的位置,upper_bound
则是第一个大于。next_permutation()/prev_permutation()
:返回当前排列下一个或上一个排列(只要数组元素可以比较大小即可)。用的较少,用到了再细讲。sort()
:一般用sort(a,a+n)
将数组a[0~n-1]
排序为升序,用sort(a,a+n,greater<数据类型>)
则是降序,如果需要用自定义比较函数bool cmp(int a,int b);
则可以使用sort(a,a+n,cmp)
(数据类型可换)。
- 其他 STL,比如
vector
、queue
、priority_queue
、list
、stack
、map
等等甚至还有号称平板电视的各类数据结构,因为大多涉及算法实现,这里仅做了解。
No Comments