数组运算符“-”(连字符或破折号)在 C 语言中的含义和作用是什么?

What does the array operator "-" (a hypen or a dash) mean and do in C?

我正在上一门操作系统课程,我们被分配了 "Project 1 UNIX Shell and History Feature",如 Abraham Silberschatz 操作系统第 157 页中所述。我正在研究这个问题并遇到了一个有趣的 GitHub代码。它包括一个 "else if" 语句和一个我以前从未见过的运算符(破折号 -)。我正在尝试找出它的作用。
(link)https://github.com/deepakavs/Unix-shell-and-history-feature-C/blob/master/shell2.c

else if (args[0][0]-'!' ==0)
{   int x = args[0][1]- '0'; 
    int z = args[0][2]- '0'; 

如您在两个 D 数组 "ags[0][0]-'!'" 以及 "int x" 和 "int z"

中所见

谁能告诉我这叫什么,它在做什么?

谢谢

args[0][1] - '0' 是将表示数字的 char 值转换为该数字的数值的惯用方法。它适用于 C 支持的所有编码

args[0][0] - '!' == 0 是一种测试 args[0][0] 是否与 '!' 具有相同值的华而不实的方法。作者有一种特殊的,也许是不切实际的对称感:大多数人会写 args[0][0] == '!'.

二元减法运算符。一个数学 "minus" 如果你愿意的话。

在这种特定情况下,它用于从数字中减去 '0' 的符号值,以从符号转换为整数。

这是减法。 char 值也是数字,可以像任何其他数字类型一样相互加、减、乘、除。

您的代码中具体发生的事情是您的 C 编译器使用的字符集有一些有用的关系,例如数字的文本表示恰好 '0' 高于该数字的实际数值数字,所以减去 '0' 将得到数字本身。 C 支持的所有编码都是如此。

顺便说一下,第一个比较很容易就是 if(args[0][0] == '!')

由于字符在内部只是数字,args[0][0] - '!' == 0 检查第一个参数的第一个字符是否等于 '!'args[0][1] - '0' 将字符转换为其数值。