簡體   English   中英

在一行中:str =(char *)malloc(15); (char *)是什么意思?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM