运算符与表达式C扩展特性在 C 运算符基础上扩展在 C 语言运算符与表达式 中我们系统学习了算术、关系、逻辑、赋值、位运算等运算符。C 完全兼容这些运算符并新增了new/delete、nullptr、流运算符/等重要特性。本篇重点讲解 C 扩展算术、关系、逻辑等基础运算符请参阅 C 教程。一、C 运算符回顾链接C 支持 C 的全部运算符类别运算符详见算术-*/%C 第 05 篇 §二关系!C 第 05 篇 §三逻辑||!同上赋值-等同上位运算|^~同上C 差异关系与逻辑运算的结果类型为boolC 中为int。二、new 与 delete 运算符2.1 动态内存分配C 使用malloc/freeC 推荐使用new/delete#includeiostreamintmain(){// 分配单个 intint*pnewint(42);std::cout*pstd::endl;deletep;// 分配数组int*arrnewint[5]{1,2,3,4,5};for(inti0;i5;i)std::coutarr[i] ;std::coutstd::endl;delete[]arr;// 数组必须用 delete[]return0;}操作语法释放单个对象new Type(值)delete ptr;对象数组new Type[n]{...}delete[] ptr;现代 C 更推荐智能指针见 第 13 篇避免裸 new/delete。2.2 new 与 malloc 的区别特性new/deletemalloc/free类型类型安全返回正确类型指针返回void*需强制转换构造/析构调用构造/析构函数不调用失败处理抛出bad_alloc异常返回 NULL所属C 运算符C 库函数三、nullptrC11 引入nullptr作为空指针字面量替代 C 的NULL实为 0int*pnullptr;if(pnullptr)std::cout空指针std::endl;// 函数重载时 nullptr 不会歧义voidf(intx){std::coutint\n;}voidf(int*p){std::coutpointer\n;}f(nullptr);// 调用 f(int*)四、流运算符 与 4.1 输出运算符 #includeiostreamintmain(){intx10;doubley3.14;std::coutx x, y ystd::endl;return0;}可链式调用编译期检查类型。4.2 输入运算符 inta,b;std::cinab;五、作用域解析运算符 ::std::coutHello;// std 命名空间Math::add(1,2);// 自定义命名空间Student::getName();// 类静态成员后续章节六、类型转换运算符C 提供四种显式类型转换C 风格(type)expr仍可用但不推荐运算符用途示例static_cast编译期可检查的转换static_castdouble(a)dynamic_cast多态类型的安全向下转换见第 11 篇const_cast去除/添加 const少用reinterpret_cast低层重新解释位模式慎用inta10;doubledstatic_castdouble(a);七、运算符重载初识C 允许为用户定义类型重载运算符类章节详述// 后续在类与对象章节学习// std::string s1 Hello, s2 World;// std::string s3 s1 s2; // 运算符被重载八、实战练习练习1new/delete 练习动态分配一个double数组长度为 n用户输入填入 1n 并输出。练习2nullptr 与指针编写函数void print(int* p)若 p 为 nullptr 输出「空」否则输出值。练习3类型转换用static_cast实现整数除法得到浮点结果。九、总结与延伸本节重点回顾C 兼容 C 全部运算符关系/逻辑结果为boolnew/delete用于动态内存数组用delete[]nullptr是类型安全的空指针/用于 iostream 输入输出::用于命名空间与类成员访问下节预告下一篇《流程控制》在 C 基础上学习 bool 条件与 C 风格写法。延伸阅读C 语言运算符与表达式C 速查 §3 运算符知识点卡片new/delete类型安全的动态内存delete[] 释放数组nullptr 替代 NULLstatic_cast 用于安全类型转换 流运算符:: 作用域解析⚠️注意事项new 与 delete 必须配对new[] 与 delete[] 必须配对避免裸 new/delete优先使用 vector 和智能指针有疑问欢迎在评论区留言下一篇见