数组运算符“-”(连字符或破折号)在 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'
将字符转换为其数值。
我正在上一门操作系统课程,我们被分配了 "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'
将字符转换为其数值。