)关于if和for语句
我是一个试图从C ++代码中理解算法的新手,之后我想用java来实现它,但是我发现在理解代码时遇到困难,这里有3段代码让我困惑
inline Edge *Node::NextEdge( Edge *prev)
{
for (int i = 0; i < 4; i++)
prev = (Edge *) ( (int) prev ^ (int) edge[i] );
return prev;
}
// ____________________________________________________
if (nextfrag)
{
if ( --nextfrag->degree)
new_frag( nextfrag, fragnum, len, edge );
// _________________________________________________
for (pedge = edge; pedge->parent; pedge = pedge->parent);
我的第一个代码的问题:迭代如何按位异或操作? 什么是prev = (Edge *) ( (int) prev ^ (int) edge[i] );
意思? 什么是返回prev
的价值?
第二代码的问题:在if语句中如何减少运算符if ( --nextfrag->degree)
作用?
第三个代码:是否有任何其他方式来编写语句? 并且请向我解释这个陈述的意思,因为作为一个新手我只是用来i = 0; 我=某事; 我++
对不起,愚蠢的问题,但你的解释会帮助我这么多,在此先感谢:)
prev = (Edge *) ( (int) prev ^ (int) edge[i] )
(Edge *)将结果作为指向Edge对象(或结构体)
( (int) prev ^ (int) edge[i] )
表达式将指针'prev'(一个Edge)转换为一个int,并与数组元素edge [i] XORing(不确定该类型,因为该变量超出了范围 - 但假设它是一个指向边的指针数组)。 指针(地址)大小是int。 不确定算法是什么,但似乎认为这将导致新的有效指针地址到另一个边缘进行下一次迭代。
--nextfrag->degree
在这种情况下,递减nextfrag指向的度成员,这是指向具有“度”成员的结构的指针。
for (pedge = edge; pedge->parent; pedge = pedge->parent);
这将遍历链表,直到pedge-> parent == 0(链表中的头节点)
这段代码非常依赖包含在单词边界上的结构。 指针(地址)是32位或64位,所以这是非常糟糕的代码,除非您完全确定它将运行的目标计算机,因为如果没有明确打包结构,它可能会导致32位或64位计算机之间的结果不同。 请参阅“#pragma pack”。
这并不会让它更容易理解。
链接地址: http://www.djcxy.com/p/58239.html