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语言更加灵活和强大,但也增加了学习曲线和复杂性。正确理解和使用这些特性可以帮助编写更高效、紧凑和可读的代码。

相关推荐
weixin_45776000几秒前
Python 数据结构
数据结构·windows·python
我不会插花弄玉11 分钟前
vs2022调试基础篇【由浅入深-C语言】
c语言
一个不知名程序员www1 小时前
算法学习入门---vector(C++)
c++·算法
云飞云共享云桌面1 小时前
无需配置传统电脑——智能装备工厂10个SolidWorks共享一台工作站
运维·服务器·前端·网络·算法·电脑
明洞日记1 小时前
【数据结构手册002】动态数组vector - 连续内存的艺术与科学
开发语言·数据结构·c++
福尔摩斯张1 小时前
《C 语言指针从入门到精通:全面笔记 + 实战习题深度解析》(超详细)
linux·运维·服务器·c语言·开发语言·c++·算法
fashion 道格1 小时前
数据结构实战:深入理解队列的链式结构与实现
c语言·数据结构
橘颂TA1 小时前
【剑斩OFFER】算法的暴力美学——两整数之和
算法·leetcode·职场和发展
xxxxxxllllllshi2 小时前
【LeetCode Hot100----14-贪心算法(01-05),包含多种方法,详细思路与代码,让你一篇文章看懂所有!】
java·数据结构·算法·leetcode·贪心算法
前端小L2 小时前
图论专题(二十二):并查集的“逻辑审判”——判断「等式方程的可满足性」
算法·矩阵·深度优先·图论·宽度优先