C/C++常见符号与运算符

C/C++常见符号与运算符对照表

符号 用法与意义 与Java类比
: 在条件运算符中 (cond ? x : y) 表示条件为假的分支; 在 switch-case 中如 case 1:表示标签结束点; 在自定义标签如 label: 中用于 goto 跳转 Java中? :三元运算相同;switch-case中也有:用于分支
:: (C++特有) 作用域解析符,std::stringClassName::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++++ii----i与Java意义相同 与Java自增自减一致
+= -= *= /= %= <<= >>= &= ^= ` =` 复合赋值运算符,与Java相同,如 a += ba = 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++中这些符号的意义和用法。

相关推荐
是娇娇公主~11 分钟前
C++ 中 std::deque 的原理?它内部是如何实现的?
开发语言·c++·stl
SuperEugene30 分钟前
Axios 接口请求规范实战:请求参数 / 响应处理 / 异常兜底,避坑中后台 API 调用混乱|API 与异步请求规范篇
开发语言·前端·javascript·vue.js·前端框架·axios
xuxie991 小时前
N11 ARM-irq
java·开发语言
wefly20172 小时前
从使用到原理,深度解析m3u8live.cn—— 基于 HLS.js 的 M3U8 在线播放器实现
java·开发语言·前端·javascript·ecmascript·php·m3u8
luanma1509803 小时前
PHP vs C++:编程语言终极对决
开发语言·c++·php
寂静or沉默3 小时前
2026最新Java岗位从P5-P7的成长面试进阶资源分享!
java·开发语言·面试
kyriewen113 小时前
给浏览器画个圈:CSS contain 如何让页面从“卡成PPT”变“丝滑如德芙”
开发语言·前端·javascript·css·chrome·typescript·ecmascript
娇娇yyyyyy4 小时前
QT编程(18): Qt QItemSelectionModel介绍
开发语言·qt
豆豆的java之旅4 小时前
软考中级软件设计师 数据结构详细知识点(含真题+练习题,可直接复习)
java·开发语言·数据结构
sthnyph4 小时前
QT开发:事件循环与处理机制的概念和流程概括性总结
开发语言·qt