亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么可以在定義自己之前聲明類類型(在 Java 中)或結構類型(在 C 中)?

為什么可以在定義自己之前聲明類類型(在 Java 中)或結構類型(在 C 中)?

MMTTMM 2021-06-08 13:51:39
在這里,我想展示一些我想知道的 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 的情況下。但這是一般的想法。


查看完整回答
反對 回復 2021-06-10
?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

C 的答案:


C的用于區分完整和不完整的類型。A型可引入作為不完整的類型和稍后完成在相同的翻譯單元。不同之處在于,對于完整類型,編譯器知道存儲大小——對于不完整類型,它不知道。


如果你寫


struct foo;

你已經聲明了一個類型,但在這個階段它是不完整的。對于不完整的類型,可以使用指向該類型的指針,但不能使用該類型本身的對象。現在,在您的示例中:


struct node{

    struct node *p_node;   //here

};

該不完整的類型struct node,在第一行之后已知的。因此,在第二行中使用指向該類型的指針是完全合法的。在第三行中,類型已完成,您現在可以使用類型為 的對象struct node。


旁注:C 中只有一種不完整的類型無法完成:void. 所以你總是可以使用指向 void ( void *) 的指針,但不能使用void值。


查看完整回答
反對 回復 2021-06-10
  • 2 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號