在堆栈溢出时有这个问题 Why type cast a void pointer? 我想提出有关评论的问题,但由于我是新手,所以我不允许。 我的问题是在纪尧姆给出的第二个答案中,有这个功能。
void some_function(void * some_param) {
int some_value = *((int *) some_param); /* ok */
我可以这样吗
// function defination
void some_function(void * some_param) {
int some_value = *some_param;
// calling function, casting in argument
some_function((int *) some_param);
谢谢
答案 0 :(得分:2)
在此次通话中
some_function((int *) some_param);
函数参数被隐式转换为参数void *
的类型。因此,转换是多余的,并且该语句在函数中
int some_value = *some_param;
无效。
根据C标准(6.3.2.2无效)
1无效表达式(具有以下内容的表达式)的(不存在)值 类型void)不得以任何方式使用,无论是隐式还是显式 转换(除void之外)不得应用于此类 表达。 如果任何其他类型的表达式被评估为 无效表达式,其值或指示符将被丢弃。 (一个空白 评估其表达的副作用。)
这个表情
*some_param
函数中的类型为void
void some_function(void * some_param) {
int some_value = *some_param;
//...
}
关于这个问题
在函数调用期间,我可以将其void *参数转换为任何其他类型 在ANSI C中
您可以将类型为void *
的指针分配给任何其他类型的对象而无需强制转换,也可以将类型为void *
的指针强制转换为任何对象指针类型。 >