我是c#的新手并从c切换到c#。我想把c等同于c#。同样我喜欢这样:
temp = (struct Node*)malloc(sizeof(struct Node));
Node是:
struct Node
{
unsigned int symbol ;
int freq;
struct Node * next, * left, * right;
}
在c#中,我使用class
代替struct
。
我试着这样做:
Node temp = new Node();
Node
除了它是一个类并使用公共(我确信这是正确的)之外是相同的。
如果我错了,你能帮我吗?它是否正确创建了与使用malloc()创建的节点等效的节点?
答案 0 :(得分:4)
你的课应该看起来像
public class Node
{
public unsigned int symbol;
public int freq;
public Node next;
public Node left;
public Node right;
}
如果您指定的next
,left
和right
类似于
Node root = new Node();
root.next = new Node();
您将看到与您在C中所做的非常相似的行为。
存储由运行时自动管理,因此没有显式调用malloc
或free
的等效项。这一切都发生在幕后。
另外,作为一般规则,不要在C#中使用指针。如果您将代码标记为 unsafe ,则可以执行此操作,但很少有实例不安全代码是C#应用程序的正确路径
注意:该示例使用对类和字段的公共访问。您可能希望根据具体用途对其进行限制。
答案 1 :(得分:2)
对我而言看起来是正确的。
作为额外的奖励,它还会调用Node()
的构造函数,如果你有一个并初始化值。
答案 2 :(得分:1)
class Node
{
public int symbol ;
public int freq;
public Node next;
}
class Program
{
static void Main(string[] args)
{
Node temp = new Node() ;
temp.symbol = 1;
temp.freq = 2;
temp.next = null;
}
}