我正在努力通過學習c的艱難的方式書,並遇到了練習19上的幾個問題。作者說,ex19是爲了讓學習者瞭解宏中的c 。我理解這個概念沒有問題,但我不明白其他的一切。我無法理解對象原型是如何創建的。一個簡單的對象系統
Especilly,以下說明是什麼意思?
由於C放Room.proto場第一,這意味着EL指針是 確實僅在足夠的存儲器塊以查看完整的 對象結構的指向。它不知道它甚至被稱爲原型。
相關的代碼是這樣的:
// this seems weird, but we can make a struct of one size,
// then point a different pointer at it to "cast" it
Object *el = calloc(1, size);
*el = proto;
- 誰能告訴我如何在地球上的malloc /釋放calloc準確的作品?據我所知,它只是分配所需數量的內存並返回第一個地址。如果是這樣,計算機如何知道分配內存的數據結構?喜歡在代碼中,
Room *arena = NEW(Room, "The arena, with the minotaur");
之後,你可以直接這樣做arena->bad_guy = NEW(Monster, "The evil minotaur");
電腦怎麼知道有一個bad_guy
? - 上述兩條語句(
Object *el = calloc(1, size);
和*el = proto;
)後面的* el的內容究竟是什麼?
任何幫助將不勝感激!
的鏈接練習:http://c.learncodethehardway.org/book/ex19.html
內存「malloc」ed的類型由您分配返回值的指針類型所隱含。 malloc的大小通過「malloc」例程存儲(通常在返回地址之前的內存中),這就是「自由」神奇地知道當調用它時要返回多少內存。 – AnthonyLambert