2012-12-04 128 views
0

我已经完成了创建非常快速的nqueens程序的任务。到目前为止,Bruteforce算法和Backtrack正在工作,但我发现了一个似乎更快的C程序。现在我试图将它从C转换为Java,但是我无法转换指针,因为我不了解指针发生了什么。 这些都是必须转换线:将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++的原因。

问候, 丹尼斯·菲舍尔

+3

取而代之的指针,使用'int'指数。 – nhahtdh

+0

我已经阅读过关于这方面的内容,但是我不知道该怎么做:)。假设pnStack的类型为int:pnStack = aStack +1;现在在pnStack中保存的结果是什么? –

+1

不,你想要nIndex = 1来对应pnStack = aStack + 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) 
+0

因为它不是一个指针,所以可能不会使用nStack或索引的东西。 –

+0

@NicholasWilson哦,右侧是打算成为Java所以不用担心指针:-) – SJuan76

+0

这看起来不错。但是,该应用程序仍然无法正常工作。你能解释比较(转换6)的结果吗? –