由于指针的原因,我在将以下代码从 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++ 问题。对不起,如果我没有任何意义 =)
最佳答案
它不是二维数组,而是包含指向单个元素的指针的一维数组...
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);
}
关于c# - 将一些 C++ 数组代码转换为 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4359202/