2017-03-09 74 views
0

malloc()函數據說返回一個空指針或指向已分配空間的指針。假設一個字符串,我們做出聲明:返回malloc()函數

char* ptr = malloc(size) 

是不是ptr的指針將指向指針?
是不是:

char** ptr = malloc(size) 

應該是申報字符指針的正確方法是什麼?

但是,編譯器在我們做的時候並沒有給出警告,它給出的警告是格式說明符(如果使用的話)。

我們應該如何申報,爲什麼?另外,如何使用char **?

+1

@ Jean-FrançoisFabre這不是一個有效的上帝,我猜。 –

+1

我應該閱讀文本而不僅僅是代碼。 –

回答

3

char *表示一個字符指針。 Malloc將返回一個void *指針(該指針將自動轉換爲您要分配的任何指針)。

char **表示char *指針。這是一個指向指針的指針。

如果你認爲一個指針作爲一個地圖,你有char *是一個映射到一個char的,void *是一個地圖,神祕的東西和char **是一個地圖到另一個地圖,導致一個char。所以

char* ptr = malloc(size); 

是正確的,因爲你想要一個地圖的東西,而不是映射到地圖。

+4

你應該說「自動轉換」,而不是「轉換」,以避免與* cast *的含義混淆爲明確的轉換。 – trentcl

+0

@NomeQueEuLembro,如何將cast與malloc()或calloc()一起使用,請你舉個例子嗎? – BumbleBee

+1

謝謝,@ trentcl!固定。 – NomeQueEuLembro

4

不,'ptr'將包含'malloc'返回的指針。你是指定返回的指針,沒有取其地址。

1
  • *ptr是指向一個char,其通常用於管理陣列 或字符串。

  • **ptr是一個指針的指針爲char,其經常被用於
    管理的矩陣(陣列的陣列)或一個字符串數組。