該(double*)
是鑄;每當你看到的形式(
類型名稱)
表達的表達,它的意思是「解釋表達的結果作爲型類型名稱值」。在這種情況下,它說「將malloc
的結果解釋爲指向double
的指針」。
通常,一種類型的指針值(如char *
)不能直接分配給不同類型的指針變量(如double *
),因此您必須使用轉換表達式將源值顯式轉換爲目標類型。在1989年標準之前,malloc
,calloc
和realloc
都返回了char *
值,所以您必須使用轉換將結果分配給不同的指針類型。
的void *
類型已在1989年的標準作爲一種通用的指針類型可以被分配到不同的指針類型,而不需要鑄造引入,並且所述*alloc
功能進行了更改,以返回類型的值。明確地施放malloc
的結果現在被認爲是不好的做法。
轉換表達式中類型的結構與聲明中類型的結構非常匹配,只是沒有聲明的東西的名稱。這可能最好用一些例子來解釋。
int *p
聲明p
作爲指向int
的指針;要將表達式的結果投射到指向int
的指針,請編寫(int *)
。這與聲明相同,減去標識p
。
下面是幾個例子:
Declaration Cast Type
----------- ---- ----
int (*ap)[10] (int (*)[10]) Pointer to 10-element array of int
int (*f)(void) (int (*)(void)) Pointer to function returning int
char **p (char **) Pointer to pointer to char
如此反覆,轉換表達式的結構是一樣的宣言結構,減去被宣佈的東西的名字。
這些都是相同的語法。空白不重要。 – EJP
我不太瞭解downvoting,但是有人能夠解釋爲什麼post是downvoted?我看到downvote的描述是「這個問題沒有顯示任何研究工作,它不清楚,或者沒有用處。」然而,我正在尋找我的問題的答案,找不到一個。我說我做了研究,並認爲我非常清楚我在找什麼。答案對我理解我正在使用的代碼非常有用。我錯過了什麼? – TZPike05