将一些c ++数组代码转换为c#

时间:2010-12-05 14:16:48

标签: c# c++

由于指针的原因,我在将以下代码从c ++转换为c#时遇到了一些麻烦。

基本上我有一个

STATE** State;
States = new STATE* [max_states];

for (int i=0; i < max_states; i++) {
  States[i] = new STATE(max_symbols);
}

如果这是一个双数组,我会说

STATE[][]  States;  
States = new STATE[max_states][];

for (int i = 0; i '<' max_states; i++) {
    States[i] = new STATE[max_symbols];
}

但问题是c ++代码没有像我预期的那样工作。

States[i] = new STATE(max_symbols);

有一些奇怪的行为,例如允许

States[cur_state]->set_recur_out(k);

到底我没看到什么?这可能是一个初学者的c ++问题。对不起,如果我没有任何意义=)

2 个答案:

答案 0 :(得分:3)

它不是2d数组,而是包含指向单个元素的指针的1d数组...
new STATE(max_symbols)构造一个STATE对象,调用构造函数,该构造函数接受一个参数(在本例中为max_symbols)。

我没有C#的那么多线索,但以下内容应该是C#中C ++代码的正确表示:

STATE[]  States;  
States = new STATE[max_states];

for (int i = 0; i '<' max_states; i++) {
    States[i] = new STATE(max_symbols);
}

答案 1 :(得分:1)

这只是一个指针数组。在C#中,它将是一维数组:

STATE[]  States = new STATE[max_states];

for (int i = 0; i < max_states; i++) {
    States[i] = new STATE(max_symbols);
}

您在C ++中看到的“奇怪行为”只是访问指向类型的指针成员的C ++方式:

Type* x;
x->y();
// is the same as:
(*x).y();
// and corresponds to:
Type z;
z.y();