零赋值的简写形式,如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'
的事情。(但我想这是另一个问题。)请不要写那个:(是的,我知道:)只是想展示一下,这是可能的