0

我的任务是创建一个非常快速的 nqueens 程序。到目前为止,Bruteforce 算法和 Backtrack 都在工作,但我发现了一个似乎更快的 C 程序。现在我尝试将它从 C 转换为 Java,但是我无法转换指针,因为我不了解指针发生了什么。这些是必须转换的行:

编辑:我已将转换更新为我所理解的:

final int[] aStack = new int[MAX_BOARDSIZE * 2];
int bitfield; //That's what I've got so far


//Conversion 1:
register int* pnStack;       -> int pnStack;

//Conversion 2:
pnStack = aStack + 1;        -> pnStack = 1;

//Conversion 3:
pnStack = aStack + 1;        -> pnStack = 1;
*pnStack++ = 0;              -> aStack[pnStack++] = 0;

//Conversion 4:
bitfield = *--pnStack;       -> bitfield = aStack[--pnStack];

//Conversion 5:
*pnStack++ = bitfield;       -> aStack[pnStack++] = bitfield;

//Conversion 7:
pnStack == aStack            -> pnStack == aStack[0] ???????

一个解决方案会很好,但如果你能解释一下这里发生了什么,我会尝试自己找到它。指针是我从未真正学习过 c 和 c++ 的原因。

问候,丹尼斯·菲舍尔

4

1 回答 1

2

在数组中,解释指针就像在数组中使用索引一样。

表示索引当前位置的*值。

所以

pnStack = aStack;  <-- int pnStack = 0;
pnStack++;         <-- pnStack++;
bitfield = *pnStack <-- bitfield = aStack[pnStack];
bitfield = *--pnStack <-- bitfield = aStack[--pnStack]; (first decrement index, then retrieve the value)
于 2012-12-04T10:43:21.597 回答