
- C编程教程
- C - 首页
- C语言基础
- C - 概述
- C - 特性
- C - 历史
- C - 环境设置
- C - 程序结构
- C - Hello World
- C - 编译过程
- C - 注释
- C - 词法单元
- C - 关键字
- C - 标识符
- C - 用户输入
- C - 基本语法
- C - 数据类型
- C - 变量
- C - 整数提升
- C - 类型转换
- C - 类型强制转换
- C - 布尔值
- C语言中的常量和字面量
- C - 常量
- C - 字面量
- C - 转义序列
- C - 格式说明符
- C语言中的运算符
- C - 运算符
- C - 算术运算符
- C - 关系运算符
- C - 逻辑运算符
- C - 位运算符
- C - 赋值运算符
- C - 单目运算符
- C - 自增和自减运算符
- C - 三元运算符
- C - sizeof运算符
- C - 运算符优先级
- C - 其他运算符
- C语言中的决策
- C - 决策
- C - if语句
- C - if...else语句
- C - 嵌套if语句
- C - switch语句
- C - 嵌套switch语句
- C语言中的循环
- C - 循环
- C - while循环
- C - for循环
- C - do...while循环
- C - 嵌套循环
- C - 无限循环
- C - break语句
- C - continue语句
- C - goto语句
- C语言中的函数
- C - 函数
- C - 主函数
- C - 函数按值传递
- C - 函数按引用传递
- C - 嵌套函数
- C - 可变参数函数
- C - 用户自定义函数
- C - 回调函数
- C - 返回语句
- C - 递归
- C语言中的作用域规则
- C - 作用域规则
- C - 静态变量
- C - 全局变量
- C语言中的数组
- C - 数组
- C - 数组的特性
- C - 多维数组
- C - 将数组传递给函数
- C - 从函数返回数组
- C - 可变长数组
- C语言中的指针
- C - 指针
- C - 指针和数组
- C - 指针的应用
- C - 指针运算
- C - 指针数组
- C - 指针到指针
- C - 将指针传递给函数
- C - 从函数返回指针
- C - 函数指针
- C - 指向数组的指针
- C - 指向结构体的指针
- C - 指针链
- C - 指针与数组
- C - 字符指针和函数
- C - 空指针
- C - void指针
- C - 悬空指针
- C - 解引用指针
- C - 近、远和巨型指针
- C - 指针数组的初始化
- C - 指针与多维数组
- C语言中的字符串
- C - 字符串
- C - 字符串数组
- C - 特殊字符
- C语言中的结构体和联合体
- C - 结构体
- C - 结构体和函数
- C - 结构体数组
- C - 自引用结构体
- C - 查找表
- C - 点(.)运算符
- C - 枚举(或枚举)
- C - 结构体填充和打包
- C - 嵌套结构体
- C - 匿名结构体和联合体
- C - 联合体
- C - 位段
- C - Typedef
- C语言中的文件处理
- C - 输入与输出
- C - 文件I/O(文件处理)
- C预处理器
- C - 预处理器
- C - Pragmas
- C - 预处理器运算符
- C - 宏
- C - 头文件
- C语言中的内存管理
- C - 内存管理
- C - 内存地址
- C - 存储类别
- 其他主题
- C - 错误处理
- C - 可变参数
- C - 命令执行
- C - 数学函数
- C - static关键字
- C - 随机数生成
- C - 命令行参数
- C编程资源
- C - 问答
- C - 快速指南
- C - 速查表
- C - 有用资源
- C - 讨论
C语言中的单元运算符
虽然C语言中的大多数运算符本质上都是二元的,但也有一些单元运算符。如果一个运算符只需要一个操作数,则称其为单元运算符,不像二元运算符需要两个操作数。
C语言中的一些运算符在使用中既是二元的,也是单元的。C语言中单元运算符的示例包括++、--、!等。
C语言中的自增运算符
自增运算符 (++) 将其操作数变量的值加 1,并将其赋值回该变量。
语句a++等效于编写“a = a + 1”。“++”运算符可以出现在操作数之前或之后,并且它将具有相同的效果。因此,a++等效于++a。
但是,当自增运算符与表达式中的其他运算符一起出现时,其效果并不相同。“前缀++”的优先级高于“后缀++”。因此,“b = a++;”与“b = ++a;”不同。
在前面一种情况下,在递增之前将“a”赋值给“b”;而在后面一种情况下,递增是在赋值之前执行的。
C语言中的自减运算符
自减运算符 (--) 从其操作数变量的值中减去 1,并将其赋值回该变量。
语句“a--;”等效于编写“a = a - 1;”。
“--”运算符可以出现在操作数之前或之后,并且在这两种情况下,它都将具有相同的效果。因此,“a--”等效于“--a”。
但是,当自减运算符与表达式中的其他运算符一起出现时,其效果并不相同。“前缀--”的优先级高于“后缀--”。因此,“b = a--”与“b = --a”不同。
在前面一种情况下,在递减之前将“a”赋值给“b”;而在后面一种情况下,递减是在赋值之前执行的。
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
C语言中的单目“+”运算符
“+”和“–”运算符众所周知是二元加法和减法运算符。但是,它们也可以以单元方式使用。当用作单元时,它们被加到操作数变量之前。
当为任何数值变量赋值正值时,“+”运算符隐式存在。语句“int x = 5;”与“int x = +5;”相同。相同逻辑也适用于浮点型和字符型变量。
示例
请查看以下示例 -
#include <stdio.h> int main(){ char x = 'A'; char y = +x; float a = 1.55; float b = +a; printf ("x: %c y: %c\n", x,y); printf ("a: %f y: %f\n", a,b); return 0; }
输出
运行此代码时,将产生以下输出 -
x: A y: A a: 1.550000 y: 1.550000
C语言中的单目“−”运算符
通常表示减法运算符的“−”符号在C语言中也充当单目否定运算符。以下代码展示了如何在C语言中使用单目否定运算符。
示例
在此代码中,单目否定运算符返回“x”的负值,并将相同的负值赋值给另一个变量“y”。
#include <stdio.h> int main(){ int x = 5; int y = -x; printf("x: %d y: %d\n", x, y); return 0; }
输出
运行代码并检查其输出 -
x: 5 y: -5
C语言中的取地址运算符(&)
我们在C语言中使用&符号作为二元AND运算符。但是,我们也以单元方式使用相同的&符号作为“取地址”运算符。
示例
&运算符返回其变量操作数的内存地址。请查看以下示例 -
#include <stdio.h> int main(){ char x = 'A'; printf ("Address of x: %d\n", &x); return 0; }
输出
运行代码并检查其输出 -
Address of x: 6422047
注意:C编译器在声明变量时分配一个随机内存地址。因此,每次打印地址时,结果可能会有所不同。
格式说明符%p用于获取内存地址的十六进制表示形式。
char x = 'A'; printf ("Address of x: %p\n", &x);
这将以十六进制格式打印“x”的地址 -
Address of x: 000000000061FE1F
变量的地址通常存储在“指针变量”中。指针变量用“*”前缀声明。在下面的代码片段中,“x”是普通的整型变量,而“y”是指针变量。
int x = 10; int *y = &x;
C语言中的解引用运算符(*)
我们通常使用“*”符号作为乘法运算符。但是,它在C语言中也用作“解引用运算符”。
当您想存储变量的内存地址时,应在其前缀中使用星号(*)声明该变量。
int x = 10; int *y = &x;
这里变量“y”存储“x”的地址,因此“y”充当“x”的指针。要使用其指针访问“x”的值,请使用解引用运算符(*)。
示例1
请查看以下示例 -
#include <stdio.h> int main(){ int x = 10; int *y = &x; printf ("x: %d Address of x: %d\n", x, &x); printf("Value at x with Dereference: %d", *y); return 0; }
输出
运行代码并检查其输出 -
x: 10 Address of x: 6422036 Value at x with Dereference: 10
示例2
您还可以使用解引用指针为原始变量赋值 -
#include <stdio.h> int main(){ int x = 10; int *y = &x; printf("x: %d Address of x %d\n", x, &x); *y = 20; printf("x: %d with Dereference: %d", x, *y); return 0; }
输出
运行代码并检查其输出 -
x: 10 Address of x: 6422036 x: 20 with dereference: 20
C语言中的逻辑非运算符(!)
C语言中的逻辑非运算符(!)否定布尔操作数的值。真变为假,假变为真。逻辑非运算符(!)是单元运算符。
示例1
以下示例显示了如何在C语言中使用逻辑运算符 -
#include <stdio.h> int main(){ int a = 0; int b = 20; if (!(a && b)){ printf("Line 1 - Condition is true\n" ); } return 0; }
输出
Line 1 - Condition is true
示例2
以下C代码在while循环中使用NOT运算符 -
#include <stdio.h> int main(){ int i = 0; while (!(i > 5)){ printf("i = %d\n", i); i++; } return 0; }
输出
在此代码中,while循环继续迭代,直到表达式“!(i > 5)”变为False,这将发生在“i”的值大于5时。
i = 0 i = 1 i = 2 i = 3 i = 4 i = 5
C语言中的按位取反运算符(~)
C语言中的按位取反运算符(~)是单元运算符,只需要一个操作数。它具有“翻转”位的效果,这意味着任何数字的二进制表示形式中,1将被0替换,反之亦然。
a | ~a |
---|---|
0 | 1 |
1 | 0 |
假设int变量“a”的值为60(在二进制中相当于0011 1100),则根据其对应位的按位右移,~a操作将得到2的补码形式的-61。
~ 0011 1100 = 1100 0011
二进制数“1100 0011”对应于十进制中的-61。
示例
请查看此示例代码 -
#include <stdio.h> int main(){ int a = 60; /* 60 = 0011 1100 */ int c = 0; c = ~a; /* -61 = 1100 0011 */ printf("Value of c is %d \n", c); return 0; }
输出
运行此代码时,将产生以下输出 -
Value of c is -61