C/C++常见符号与运算符对照表
符号 | 用法与意义 | 与Java类比 |
---|---|---|
: |
在条件运算符中 (cond ? x : y) 表示条件为假的分支; 在 switch-case 中如 case 1: 表示标签结束点; 在自定义标签如 label: 中用于 goto 跳转 |
Java中? : 三元运算相同;switch-case 中也有: 用于分支 |
:: (C++特有) |
作用域解析符,std::string 或 ClassName::method() 指定类或命名空间作用域。在C中不存在该符号。 |
Java使用. 访问静态成员,C++使用:: 明确作用域,C无此特性 |
~ |
按位取反(bitwise NOT),对整数位逐个取反,如 ~x 。 |
与Java ~ 运算相同 |
& |
取地址和按位与运算符: - &x 取变量x的地址,用于指针。 - a & b 按位与运算。 |
Java中& 为按位与,不存在取地址运算。C/C++ & 多用途 |
* |
指针声明与解引用,以及乘法: - int *p; 声明p为指针 - *p 解引用指针 - a * b 乘法 |
Java * 仅作乘法;C/C++中还用来声明指针与解引用指针 |
-> |
用于指针访问结构体成员:ptr->field 等价 (*ptr).field |
C/C++特有,Java无指针需-> ,Java对象用. 访问成员 |
. |
成员访问运算符,用obj.field 访问结构体、类的成员 |
与Java中obj.field 相同 |
[] |
数组下标运算符:arr[i] 访问数组元素 |
与Java中数组访问相同 |
++ /-- |
自增自减运算符,i++ 、++i 、i-- 、--i 与Java意义相同 |
与Java自增自减一致 |
+= -= *= /= %= <<= >>= &= ^= ` |
=` | 复合赋值运算符,与Java相同,如 a += b 同 a = a + b |
% |
取模运算符:a % b 获取a除b的余数 |
与Java % 相同 |
^ |
按位异或运算符:a ^ b 对位进行异或。 |
与Java ^ 位异或相同 |
` | ` | 按位或运算符:`a |
<< >> |
左移、右移位运算符,a << n 左移n位,a >> n 右移n位 |
与Java移位运算相同 |
! |
逻辑非运算符:!expr ,expr为0则结果1,否则结果0 |
与Java逻辑非! 相同 |
&& |
逻辑与运算符:expr1 && expr2 。 如果expr1 为0(假)则不计算expr2 ,返回0(假); 如果expr1 非0(真),再计算expr2 决定最终结果。 |
与Java中&& 语义相同,都为短路与;当第一个为假时不继续计算 |
... (省略号) |
用于可变参数函数声明,如 int printf(const char *fmt, ...); 表示变长参数列表 |
与Java的可变参数列表作用类似,但C使用不同的机制(varargs) |
; |
语句结束符,每句以; 结束 |
与Java中语句结束使用分号相同 |
{ } |
定义代码块或作用域,如函数体、复合语句、结构初始值列表 | 与Java中大括号用途相同 |
# ## |
预处理器指令与宏相关符号:#include 、#define 以及## 参数拼接 |
C/C++预处理机制特有,Java无此编译前处理方式 |
对 &&
的具体解释
&&
是逻辑与(logical AND)运算符,用于判断两个条件表达式在布尔意义上的与关系:
- 表达式
expr1 && expr2
的求值过程是短路求值:- 首先计算
expr1
,如果expr1
为0(C中0表示false),则整个expr1 && expr2
结果为0,不计算expr2
。 - 如果
expr1
非0(true),则再计算expr2
,结果取决于expr2
是否为非0(true)。
- 首先计算
这种行为与Java中的&&
完全一致。
示例:
c
int a = 5;
int b = 0;
if (a > 0 && b != 0) {
// 当a > 0为真,会去检查b != 0。b=0则b != 0为假,因此整个if为false
// 如果a <=0,则不会检查b != 0。
}
总体对比与理解
- 对于有Java基础的人,许多C/C++运算符语义与Java相似(如逻辑运算
&&
,||
,算术与移位运算等)。 - 不同点在于C/C++中有指针相关运算符(
&
取地址、*
解引用、->
访问指针成员)和预处理器指令(#
,##
),以及C++作用域解析::
。 - 在C中,
&&
、||
都提供短路求值,与Java中相同,这有助于使用条件判断更高效。
通过这张表格和解释,你可以快速理解C/C++中这些符号的意义和用法。