“?”有什么用?和“:”在一个以指针作为参数的函数中?
what's the use of "?" and ":" in a function that has a pointer as argument?
今天我的老师教我们如何使用 C 中的指针来模拟这种编程语言的一些常用函数,他的一个例子是 rev_string
函数(如下所示),它是为模拟原始函数而创建的strrev()
来自 <string.h>
header.
void rev_string(char *s)
{
char *t;
int counter = 0, middle, temp, i, j, last, begin;
for (t = s; *t != '[=10=]'; t++)
counter++;
middle = (counter % 2 == 0) ? (counter / 2) : ((counter - 1) / 2);
j = counter - 1;
for (i = 0; i < middle; i++)
{
last = s[j];
begin = s[i];
temp = last;
s[j] = begin;
s[i] = temp;
j--;
}
}
上面的代码看了好几遍,想不通在middle
变量中声明的?
和:
的用法。谁能解释一下为什么上面的代码中需要这些符号?
这是条件运算符。它是一个三元运算符,其形式为“condition ? if-part : else-part” .
它评估它的第一部分。如果结果非零,则计算第二部分并成为表达式的结果,否则计算第三部分并成为表达式的结果。
所以这个:
middle = (counter % 2 == 0) ? (counter / 2) : ((counter - 1) / 2);
相当于:
if (counter % 2 == 0) {
middle = (counter / 2);
} else {
middle = ((counter - 1) / 2);
}
今天我的老师教我们如何使用 C 中的指针来模拟这种编程语言的一些常用函数,他的一个例子是 rev_string
函数(如下所示),它是为模拟原始函数而创建的strrev()
来自 <string.h>
header.
void rev_string(char *s)
{
char *t;
int counter = 0, middle, temp, i, j, last, begin;
for (t = s; *t != '[=10=]'; t++)
counter++;
middle = (counter % 2 == 0) ? (counter / 2) : ((counter - 1) / 2);
j = counter - 1;
for (i = 0; i < middle; i++)
{
last = s[j];
begin = s[i];
temp = last;
s[j] = begin;
s[i] = temp;
j--;
}
}
上面的代码看了好几遍,想不通在middle
变量中声明的?
和:
的用法。谁能解释一下为什么上面的代码中需要这些符号?
这是条件运算符。它是一个三元运算符,其形式为“condition ? if-part : else-part” .
它评估它的第一部分。如果结果非零,则计算第二部分并成为表达式的结果,否则计算第三部分并成为表达式的结果。
所以这个:
middle = (counter % 2 == 0) ? (counter / 2) : ((counter - 1) / 2);
相当于:
if (counter % 2 == 0) {
middle = (counter / 2);
} else {
middle = ((counter - 1) / 2);
}