[英]In the line: str = (char *) malloc(15); what does the (char *) mean?
我正在嘗試學習C語言中的malloc。我已經做了一些Java編程,但是想學習一些基本的代碼。
讓我解釋一下我對此的了解,並希望有人可以填補空白。
在該行中:
str = (char *) malloc(15);
我知道我們在這里正在為該字符串分配內存。 15個內存單位,我假設15個單位是15個字節,因為1個char占用一個字節(是嗎?)
讓我感到困惑的是(char *)這是什么意思? 我知道*是指針和取消引用運算符,但是我在上下文中迷失了它的含義。
根據我有限的編程經驗,我的第一個猜測是(char *)是一個顯式轉換。.但是我不確定。
如果以前曾問過這個問題,我深表歉意,但是我已經搜索過了,並且還搜索了(char *)和類似(int *)的變體,這在其他示例中已經看到,但是似乎無法得到解釋。
任何幫助最感激。
這是一個強制轉換,將malloc
的輸出轉換為char *
。
在C中沒有必要或不需要malloc
的返回值。
Malloc只是嘗試為您分配一定數量的內存(以字節為單位),如果成功,則返回指向該內存塊開始的指針;如果失敗,則返回NULL。 與您在Java中看到的不同,在C中,char始終是一個字節。 從malloc
返回的類型為void*
(即無類型)。 強制轉換為char*
只是使類型與您想要的類型匹配,但由於類型將自動為您轉換,因此是多余的。 實際上,您可能不想在C中進行顯式轉換,有關此內容的更多信息,請參見以下答案: https : //stackoverflow.com/a/605858/296460
請注意,與C語言不同,C ++中的void*
與其他指針類型不兼容,因此,如果不進行顯式轉換,則會出現錯誤。 這是C和C ++不是兼容語言的情況的示例。 問題中的代碼示例似乎是從C ++取一個約定,然后在C中使用該約定,這是可以避免的。
在C語言中,您無需malloc
的返回值。 malloc
返回的指向void的指針自動轉換為正確的類型。
str = (char *) malloc(15);
它只是強制轉換,對於C
則沒有必要。 但是人們確實會進行強制轉換,因為如果您希望您的代碼可以使用C ++編譯器進行編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.