(char *)x或(void *)z是什么意思?

我知道char *x表示指向char的指针,但我对(char*) x含义感到困惑。

这是演员。 您正在指示编译器将x视为char * ,无论其实际类型如何。 只有在你真正了解自己在做什么的情况下才能使用演员表。

对于某些内置类型,编译器可以执行有意义的转换,例如通过舍入将double转换为int ,但对于其他类型,您可能无法获得预期的结果。

它意味着将x转换为指向char(或一般指针)的指针。

()是演员。

(char *) x表示“将转换运算符应用于操作数x”。

转换运算符将操作数的值转换为()之间的类型。

键入强制转换为字符指针。

实际上, char *x是一个声明。 x是指向char的指针。

如果您已经有一个变量,例如x ,则可以将其转换为其他类型。 在您的情况下, (char*) x是多余的,因为x已经是指向char的指针。 但是你可以将它转换为int *或其他东西。 虽然,请注意,它不安全,因为int大于char。

表达式(char *)x是一个类型转换,它返回x转换为char *类型的值。

根据操作数和目标类型,强制转换的结果可能会有很大差异:例如,您可以使用强制转换将浮点值舍入为整数精度,除去const之类的限定符,将指针转换为整数以进行高级地址计算像对齐检查和许多其他事情。

但是,并非所有可能的强制转换都会导致合法值 – 例如,转换指针会违反别名和对齐规则。

在执行基于字节的指针算术时,将(有效)非函数指针转换为char *总是合法且有用的。

声明类型为char的变量“x”的声明:

 char x; 

声明一个名为“x”的变量,它是一个指向char的指针:

 char *x; 

键入char的不是char的东西:

 int x = 10; char y = (char)x;