Cprogramming 简明教程
Unary Operators in C
虽然 C 中的大多数运算符本质上都是二元(binary)的,但也有一些一元运算符。如果运算符只需要一个操作数,则称之为一元,这不同于需要两个操作数的二元运算符。
C 中的一些运算符在使用上既是二元也是一元。C 中一元算子的示例包括 ++ 、 -- 、 ! 等。
The Increment Operator in C
自增运算符(++)向其操作数变量的值加 1,并将其重新赋值给该变量。
a 语句等价于写成 “ a = a + 1 ”。“"" 运算符可以在操作数之前或之后出现,效果相同。因此, a 等价于 a 。
然而,当自增运算符与表达式中的其他运算符一起出现时,其效果并不相同。“前缀” 的优先级高于 “后缀”。因此,“ b = a; ” 与 “ b = a; ” 不同。
在第一种情况下,“a” 在自增之前赋值给 “b”;而在第二种情况下,自增在赋值之前执行。
The Decrement Operator in C
递减运算符 (--) 会从操作数变量的值中减去 1,然后将其重新赋值给该变量。
a--; 语句等价于写成 “ a = a - 1; ”
“--” 运算符可以在操作数之前或之后出现,在任何情况下,效果都是相同的。因此,“ a-- ” 等价于 “ --a ”。
然而,当递减运算符与表达式中的其他运算符一起出现时,其效果并不相同。“前缀 --” 的优先级高于 “后缀 --”。因此,“ b = a-- ” 与 “ b = --a ” 不同。
在第一种情况下,“a” 在自减之前赋值给 “b”;而在第二种情况下,自减在赋值之前执行。
The Unary "+" Operator in C
“+” 和 “–” 运算符是众所周知的二进制加法和减法运算符。然而,它们也可以用作一元运算。当用作一元运算时,它们被前缀添加到操作数变量。
每当正值赋值给任何数字变量时,“+” 运算符会隐式存在。 int x = 5; 语句与 int x = +5; 相同。相同的逻辑也适用于浮点和字符变量。
The Address-of Operator (&) in C
我们在 C 中使用 & 符号作为二进制 AND 运算符。然而,我们也使用相同的 & 符号作为一元运算,即 “取地址” 运算符。
Example
& 运算符返回其变量操作数的内存地址。请看以下示例:
#include <stdio.h>
int main(){
char x = 'A';
printf ("Address of x: %d\n", &x);
return 0;
}
运行代码并检查其输出:
Address of x: 6422047
Note :每次声明变量时,C 编译器都会分配一个随机内存地址。因此,每次打印地址时,结果都可能不同。
格式说明符 %p 用于获取内存地址的十六进制表示形式。
char x = 'A';
printf ("Address of x: %p\n", &x);
这将以 16 进制格式打印“x”的内存地址:
Address of x: 000000000061FE1F
变量的地址通常存储在 “指针变量” 中。指针变量用一个 “*” 前缀声明。在下面的代码片段中,“x” 是一个普通整数变量,而 “y” 是一个指针变量。
int x = 10;
int *y = &x;
The Dereference Operator (*) in C
我们通常使用 “*” 符号作为乘法运算符。然而,它在 C 中也用作 “解引用运算符”。
当你想存储变量的内存地址时,该变量应该用一个星号 (*) 前缀声明。
int x = 10;
int *y = &x;
此处变量 "y" 存储 "x" 的地址,因此 "y" 充当 "x" 的指针。若要通过指针访问 "x" 的值,请使用解引用运算符 (*)。
The Logical NOT Operator (!) in C
C 中的逻辑 NOT 运算符 (!) 否定布尔操作数的值。True 变成 False,False 变成 True。逻辑 NOT 运算符 (!) 是一个一元运算符。