2016-02-12 28 views
-1

我寫的一類,我在一個內存分配替代API,並有一個名爲以下my_malloc()(從教授已經概述基本骨架)功能返回一些我不明白的東西。我不明白這一點(爲size_t)_length回報statment

有人請指教我爲什麼_length參數在開頭有下劃線,爲什麼return語句的(size_t)與_length沒有分開?

Addr my_malloc(unsigned int _length) { 
    /* This preliminary implementation simply hands the call over the 
    the C standard library! 
    Of course this needs to be replaced by your implementation. 
    */ 
    return malloc((size_t)_length); 
} 
+0

好,'_length'僅是一個名稱,在開始下劃線看起來像函數參數的命名約定,對於人類,而不是編譯器。表達式(size_t)_length是一個表達式。我建議你在實施任務之前先學習一下C語言。 – user3159253

回答

4
  1. 誰寫的功能,認爲這將是一個好主意,叫名字_length。它沒有任何特別的意義。

  2. 當你有一個表達式(Typename)variablename它被稱爲轉換。此代碼在將_length傳遞給malloc函數之前將其轉換爲size_t類型。

這實際上是多餘的,因爲當調用malloc時,相同的轉換隱式發生。 (除非我們在C89中,並且malloc從未聲明過,但是應該由#include <stdlib.h>修復,而不是通過插入此演員陣列)

+0

現在你已經提到了鑄造,這是完全合理的。我在Java中做了很多。但由於某種原因,在我所學的所有C++課程中,我們從未被要求或甚至沒有授課。所以我只是認爲它對於Java來說很特別,並且從來沒有想過更多。謝謝! – UnworthyToast

+0

@UnworthyToast它的東西,你應該避免,除非沒有其他辦法,因爲在某些情況下,編譯器會趕上一個錯誤,你 - 但前提是你沒有寫演員。 –

+0

在下列情況下,該轉換非常有用:'unsigned'的範圍超過'size_t',編譯器警告縮小(罕見 - 從未聽說過這種情況)。通過投射,警告靜音。在這樣的演員,之前的代碼應該確保'_length <= SIZE_MAX' – chux

0

下劃線只是變量名的一部分。我可以定義一個變量x以及_x或x__。

對第二個問題:那就是從int顯式類型轉換爲size_t。

我推薦你讀一些關於用C型鑄造,​​重要的是要明白。