什么是 C 语言中的 &&&&&操作
What is &&&& operation in C
int main()
{
int i, c;
i:
for (i = 0; i < 3; i++) {
c = i &&&& i;
printf("%dn", c);
}
return 0;
}
使用gcc
编译的上述程序的输出是
0
1
1
c在上述程序中是如何评估的?
在这种情况下,它也被解析为&&
和&&
。第一个是logical AND
,而第二个&&
是标签i
的地址而不是变量i
的地址。(它是gcc的扩展)
这将被解析为c = (i) && (&&i)
;//括号只是为了让人读起来。
&
为您提供变量i
的地址。你几分钟前刚刚问过这个问题。
有关标签和值的地址的更多信息,请参阅此gcc扩展。
EDIT:由于&&
逻辑AND总是跟在语句的短路之后。因此,在第一种情况下,它将是0
,因为它找到了i=0
,所以它不会转到&&i
(逻辑表达式的第二部分)。
但在所有后续情况下,i
不是0
,因此它将给出TRUE
,并将转到下一个表达式&&i
,该表达式是标签i
的地址(并且i
的地址将始终计算为TRUE
。)
因此,除了i
是0
的第一种情况之外,全表达式的结果将始终是TRUE
意味着1
。因此,你看到了的结果
0
1
1
使用标签作为值是gcc
的扩展(请参阅此处)。你的表情片段:
c = i &&&& i;
相当于:c=i&;(&&i);其中CCD_ 27是标签CCD_。
请记住,您在这里组合了两个完全不同的i
"对象"。第一个是循环通过0, 1, 2
的i
变量,而第二个是标签i
,其地址总是某个非零值。
这意味着只有当变量i
为0
时,放置在C中的结果才会为0
(false)。这就是你得到0, 1, 1
序列的原因。
顺便说一句,如果我的一个小黄人给我买了这样的代码供生产使用,我会认真考虑"员工管理实践"。在我看来,任何能消除这种怪物可能性的事情都是一件好事:-)
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 重载操作程序时出错>>用于类中的字符串 memebr
- 对字符串进行位操作
- 不同语言中相同代码的不同行为
- 我可以在 C++ 中的函数体之外进行操作吗?
- MPI突然停止了对多个核心的操作
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 对字符数组中的元素执行逐位操作
- 如何在directx/c++中进行平移/缩放操作
- 逐位操作的隐式类型转换
- 为什么一个向量上的多线程操作很慢
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- r语言 - C++ 类型为"const std ::?
- 通用C++/Python 多语言的存在
- 有什么语言可以与C++互操作吗
- Boost状态机语言-"操作"中的"发布"事件
- 什么是 C 语言中的 &&&&&操作
- 什么是 C 语言中的 &&&&操作
- QTcpServer语言 - Android上不支持的Socket操作