C语言特殊操作符

文章目录

  • 前言
  • 一、操作符
    • [1. **条件(三元)操作符** `? :`:](#1. 条件(三元)操作符 ? ::)
    • [2. **逗号操作符** `,`:](#2. 逗号操作符 ,:)
    • [3. **位域(bit-field)**:](#3. 位域(bit-field):)
    • [4. **取地址与间接访问操作符** `&` 和 `*`:](#4. 取地址与间接访问操作符 &*:)
    • [5. **强制类型转换(Cast)** `(type)`:](#5. 强制类型转换(Cast) (type):)
    • [6. **sizeof操作符** `sizeof`:](#6. sizeof操作符 sizeof:)
    • [7. **_Alignof操作符** `_Alignof`(C11引入):](#7. _Alignof操作符 _Alignof(C11引入):)
    • [8. **复合文字(compound literals)** `(type){initializers}`:](#8. 复合文字(compound literals) (type){initializers}:)
    • [9. **指定初始化器(designated initializers)** `.member = value`(C99引入):](#9. 指定初始化器(designated initializers) .member = value(C99引入):)
    • [10. **预处理器操作符** `#` 和 `##`:](###`:)
  • 总结

前言

C语言中有一些操作符,它们可能被认为是"特殊"的,因为它们的用法和功能不同于其他常见操作符。


一、操作符

1. 条件(三元)操作符 ? :

  • 这个操作符提供了一种简洁的方式来实现if-else逻辑。
  • 语法:condition ? value_if_true : value_if_false
  • 问号前面是表达式,表达式的值(为真)不为零返回value_if_true,反之返回value_if_false

2. 逗号操作符 ,

  • 用来在表达式中顺序地求值多个表达式,并返回最后一个表达式的值。
  • 例如:(x = 5, y = 6, x + y) 将会先计算 x = 5, 然后 y = 6, 最后计算并返回 x + y 的值。

3. 位域(bit-field)

  • 虽然不是传统意义上的操作符,但这是一个特殊的结构成员声明方式,它允许定义一个特定长度(以比特为单位)的整数类型变量。
  • 例如:struct { unsigned int a:1; unsigned int b:3; } bitfield;
  • 本来int是4位,a变量这样做了之后就只占一位,但相应的存储能力也会减小,需要主要溢出问题

4. 取地址与间接访问操作符 &*

  • & 操作符用于获取变量的地址。
  • * 操作符用于解引用指针,即访问指针所指向的内存位置的值。

5. 强制类型转换(Cast) (type)

  • 用来将一个数据类型的值转换为另一个数据类型的值。
  • 例如:(int)3.14 将浮点数 3.14 强制转换为整数 3

6. sizeof操作符 sizeof

  • 返回给定类型或对象所占用的字节数。
  • 例如:sizeof(int) 返回一个整型变量所占的字节数。

7. _Alignof操作符 _Alignof(C11引入):

  • 返回指定类型所需的对齐要求。
  • 例如:_Alignof(double) 返回双精度浮点数类型的对齐值。

8. 复合文字(compound literals) (type){initializers}

  • 允许创建匿名的对象,可以是数组、结构体或联合体。
  • 例如:(int[]){1, 2, 3} 创建了一个包含三个整数的匿名数组。

9. 指定初始化器(designated initializers) .member = value(C99引入):

  • 允许你直接初始化结构体或联合体的成员,而不需要按照声明的顺序。
  • 例如:struct point { int x, y; }; struct point p = {.y = 10, .x = 5};

10. 预处理器操作符 ###

- `#` 在宏定义中使用时,可以把参数转换成字符串(字符串化)。
- `##` 用于连接两个标记(token concatenation),通常用于宏定义中。
c 复制代码
#define PASTE(a, b) a ## b
int value = PASTE(num, _count); // 相当于 int value = num_count;

总结

这些特殊操作符和特性使得C语言更加灵活和强大,但也增加了学习曲线和复杂性。正确理解和使用这些特性可以帮助编写更高效、紧凑和可读的代码。

相关推荐
你回到了你的家6 分钟前
4 常量和C预处理器
c语言·开发语言·c++
隼玉21 分钟前
【STM32-学习笔记-10-】BKP备份寄存器+时间戳
c语言·笔记·stm32·学习
不玩return的马可乐22 分钟前
LeeCode 1678. 设计 Goal 解析器
数据结构·c++·算法·leetcode·职场和发展
2401_8979156524 分钟前
冒泡排序 选择排序 插入排序
java·算法·排序算法
Ai智享38 分钟前
单线性激光扫描、多线性激光扫描?激光扫描三维重建算法环节
人工智能·算法·计算机视觉
云边有个稻草人1 小时前
【优选算法】四数之和(双指针算法)
算法·双指针算法
秋已杰爱2 小时前
递归练习三(决策树)
算法·决策树·递归·二叉树‘
python机器学习ML2 小时前
机器学习——集成学习、线性模型、支持向量机、K近邻、决策树、朴素贝叶斯、虚拟分类器分析电动车数据集Python完整代码
python·算法·机器学习·分类
计算机徐师兄2 小时前
Python基于Django的图像去雾算法研究和系统实现(附源码,文档说明)
python·算法·django·图像去雾·图像去雾算法·python图像去雾算法研究
王旭·wangxu_a2 小时前
【例43.3】 转二进制
c语言·数据结构·c++·python·算法·蓝桥杯-算法提高·基础问题