在这里,我想展示一些我想知道的 C 和 Java 示例在 C 编程中,struct node{ struct node *p_node; //here};在 Java 编程中,public class node{ public node nd= new node(); //here}class(struct)在完美定义自己之前,它们都有声明类型的共同点。通过例子,你可以看到:struct node *pline 和public node nd= new node();line 在 '}' 或 ';' 之前被描述。在这一行中,尽管 self 类型没有完美定义,但他们如何知道类型?
2 回答
月关宝盒
TA贡献1772条经验 获得超5个赞
您只是为指向结构实例的指针分配内存。在编译时需要多少内存是无关紧要的,并且在运行时将是已知的。
分配字段时所需要的只是知道指针(或 Java 中的引用,在此上下文中基本相似)占用多少内存,而不是需要多少内存来存储它所指的内容。
是的,这过于简化了,尤其是在 Java 的情况下。但这是一般的想法。
潇潇雨雨
TA贡献1833条经验 获得超4个赞
C 的答案:
C的用于区分完整和不完整的类型。A型可引入作为不完整的类型和稍后完成在相同的翻译单元。不同之处在于,对于完整类型,编译器知道存储大小——对于不完整类型,它不知道。
如果你写
struct foo;
你已经声明了一个类型,但在这个阶段它是不完整的。对于不完整的类型,可以使用指向该类型的指针,但不能使用该类型本身的对象。现在,在您的示例中:
struct node{
struct node *p_node; //here
};
该不完整的类型struct node,在第一行之后已知的。因此,在第二行中使用指向该类型的指针是完全合法的。在第三行中,类型已完成,您现在可以使用类型为 的对象struct node。
旁注:C 中只有一种不完整的类型无法完成:void. 所以你总是可以使用指向 void ( void *) 的指针,但不能使用void值。
添加回答
举报
0/150
提交
取消