请解释sbegin = s? s:*持续;

时间:2012-07-25 16:09:41

标签: c string pointers

有人可以向我解释以下代码段,特别是第三行,因为它似乎导致我的代码出错:

char * (strtok_r)(char *s, const char *delimiters, char **lasts) {
    char *sbegin, *send;
    sbegin = s ? s : *lasts;
    ...

我猜测它更像是我传递了一个不正确的指针值或者其他东西,但是因为我不确定该功能是如何做它所做的那样......

TA

编辑:我不确定发生的错误是因为g $£& mn f *£$%^%Visual Studio JIT调试器一直试图打开并乱搞一切。 GRR ..

4 个答案:

答案 0 :(得分:5)

相当于

if (s)
    sbegin = s;
else
    sbegin = *lasts;

要详细了解?:运算符,您可以阅读this

答案 1 :(得分:3)

该行:

sbegin = s ? s : *lasts;

与:

相同
if(s) 
    sbegin = s; 
else 
    sbegin = *lasts;

?:被称为三元运算符。

答案 2 :(得分:2)

此部分代码称为ternary operation

sbegin = s ? s : *lasts;

相当于

if(s != null) sbegin = s
else sbegin = *lasts;

答案 3 :(得分:1)

对我来说这很好,除了strtok_r周围的括号有点多余和不寻常。

第三行使用三元运算符:它是表示条件的正确表达式。如果问号?之前的部分评估为true(即0以外的其他部分),则整个表达式将具有?:之间的表达式值。否则它将在冒号:之后的表达式。

由于sbegins*lasts的类型匹配,我认为没有问题。