“?”有什么用?和“:”在一个以指针作为参数的函数中?

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);
}