(double*)
是演员表;每当您看到形式为(
type-name )
expression的表达式时,它的意思是“将表达式的结果解释为type-name 类型的值”。在这种情况下,它的意思是“将结果解释malloc
为指向double
”的指针。
通常,一种类型(例如char *
)的指针值不能直接分配给不同类型(例如double *
)的指针变量,因此您必须使用强制转换表达式将源值显式转换为目标类型。在 1989 年标准之前malloc
,calloc
, 和realloc
所有返回char *
值,因此您必须使用强制转换将结果分配给不同的指针类型。
该void *
类型在 1989 年标准中作为通用指针类型引入,无需强制转换即可*alloc
分配给不同的指针类型,并且函数已更改为返回该类型的值。显式转换结果malloc
现在被认为是不好的做法。
强制转换表达式中的类型结构与声明中的类型结构非常匹配,只是没有被声明的事物的名称。这可能最好用一些例子来解释。
int *p
声明p
为指向int
; 要将表达式的结果转换为指向 的指针int
,请编写(int *)
. 它与声明相同,减去标识符p
。
这里还有几个例子:
声明类型
------------ ---- ----
int (*ap)[10] (int (*)[10]) 指向 int 的 10 元素数组的指针
int (*f)(void) (int (*)(void)) 指向返回 int 的函数的指针
char **p (char **) 指向 char 的指针
同样,强制转换表达式的结构与声明的结构相同,只是减去了被声明事物的名称。