(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;