函数调用,将其void *参数转换为任何其他类型

在堆栈溢出时有这个问题 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);

谢谢

A1013737306 回答:函数调用,将其void *参数转换为任何其他类型

在此次通话中

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 *的指针强制转换为任何对象指针类型。 >

本文链接:https://www.f2er.com/3157721.html

大家都在问