2017-07-03 58 views
2

malloc函數聲明:混淆malloc和釋放calloc功能用C

void *malloc(size_t size); 

這裏,malloc返回void指針。所以,A void函數什麼也沒有返回,然後

爲什麼我們將malloc(函數調用)賦值給指針?

例如:

int *ptr; 
ptr = malloc(10 * sizeof (*ptr)); 
^^^ 

是什麼返回值從malloc()持有???

+4

'void'是* nothing *,但是指向'void'的*指針仍然是一個指針,它只是未指定它指向的數據類型。 –

回答

6

這可能是對語言的設計者的一部分不幸的選擇,但他們決定重用void他們void*結構,其中近反轉其含義是:當void表示「沒有返回值」,void*的意思是「返回一個指向什麼「。

實質上,void*是指向未指定對象的指針。必須將其轉換爲指向特定類型的指針,然後才能對其進行解引用。這正是malloccalloc返回的指針種類。

2

void和void *是不同的。 void意味着nohting,但void *可以是任何東西。 void(void *)的指針可以被轉換爲任何其他指針。

爲什麼malloc()返回void *?

這意味着malloc爲你分配了一個內存緩衝區,你可以使用它來存儲你想要的任何東西。

1

儘量不要被白色空間弄糊塗。在C語言中,你應該閱讀的聲明是這樣的:

int *i;是被解讀爲 - 變量*i這給一個int 變量i這是一個指向一個int。功能也一樣。類似void *fun()意味着fun是一個函數,它返回指向void的指針。檢查this以獲得更完整的答案。

+0

你的意思是'int * fun()' –

+0

@BasileStarynkevitch謝謝,我的不好。糾正。 – babon