Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
零赋值的简写形式,如c=str[i]| |';x';_C_Char_Boolean - Fatal编程技术网

零赋值的简写形式,如c=str[i]| |';x';

零赋值的简写形式,如c=str[i]| |';x';,c,char,boolean,C,Char,Boolean,(这是一个非常基本的问题,但我似乎找不到答案,因为它涉及到|,这是一个有问题的搜索词。) 由于字符可以在如下条件中解释为布尔值: if(str[i])。。。 如果(c)。。。 如果“\0”被认为是错误的,而任何其他字符都是真实的,我希望这也能起作用: charc=str[i]| |'x'; 但它的值总是1。C语言中有简单的速记吗?我已经习惯了JavaScript,我发现它清晰简洁。三元运算符就是您想要的: char c = str[i] ? str[i] : 'x'; 示例:如果str[i

(这是一个非常基本的问题,但我似乎找不到答案,因为它涉及到
|
,这是一个有问题的搜索词。)

由于字符可以在如下条件中解释为布尔值:

if(str[i])。。。
如果(c)。。。
如果“\0”被认为是错误的,而任何其他字符都是真实的,我希望这也能起作用:

charc=str[i]| |'x';

但它的值总是1。C语言中有简单的速记吗?我已经习惯了JavaScript,我发现它清晰简洁。

三元运算符就是您想要的:

char c = str[i] ? str[i] : 'x';

示例:如果
str[i]
是真的,则将
str[i]
的值赋给变量
c
,其他情况下赋给字母
'x'
,您应该像处理任何其他抽象一样处理它,并为它编写一个函数:

char non_zero_or_default(const char c, const char d)
{
    return c ? c : d;
}
然后将其用作:

char c = non_zero_or_default(str[i++], 'x');

如果您担心开销,您可以
inline
it

使用三元运算符。您将得到的最短值是
charc=str[i]?str[i]:'x'
@OliverCharlesworth我希望避免重复str[I],但我想开销只是视觉上的,因此并不重要。
|
返回1(如果其中一个操作数为真)或0(如果两个操作数都为假),这就是您分配给
c
的返回结果。你可以做
charc;(c=str[i])| |(c='x')
,但无论其值如何,它都可以执行
c=str[i]
,并且只有当它为false时才跟在
c='x'
后面。另请参阅到GCC扩展的链接,该扩展允许
char c=str[i++]?:'x'。谢谢;你知道如何处理
c=str[i++]| |“x”
吗?我假设它的工作原理类似于PHP,其中
'x'
将被视为真实值,因此
[whatever]或true->true
。这就是为什么会得到
1
(在C中为true);两者都
charc=str[i++]?str[i]:'x'
charc=str[i]?str[i++]:'x'
做一些不同于
c=str[i++]||'x'
的事情。(但我想这是另一个问题。)请不要写那个:(是的,我知道:)只是想展示一下,这是可能的