从void函数返回值

时间:2014-03-28 17:14:42

标签: c function void

我有一个想法,那个void函数并不意味着“不返回任何东西”,而是返回一些类型未知的东西,比如void *,它是可以将它与任何类型的数据一起使用的指针。所以我写了下面的代码来确定:

#include <stdlib.h>
#include<stdio.h>
void x_function(void *);
void x_function(void *d)
{
    printf("the integer value of d is %d \n " , *(int *)d );
    printf("the string  value of d is %s \n " , (char *)d );
    printf("the character value of d is %c \n " , *(char *)d );
    printf("the double value of d is %lf \n " , *(double *)d );
    return 10;
}

int main()
{
    int x = (int)x_function(520);
    printf("The Value is : %d" , x);
    return 0;
}

但编译器发出错误:

error: invalid use of void expression
  int x = (int)x_function(520);

我的想法是错的吗? void函数只是“不返回任何东西的函数”吗?

6 个答案:

答案 0 :(得分:4)

是的,你的想法是错误的。 void函数无法返回任何内容。您可以返回void *的原因是,正如@JohnBode在评论中提到的那样,“语言标准指定可以将指向void的指针转换为任何对象指针类型(6.3.2.3) / 1)”。指针的值被压入堆栈,然后在返回时弹出。然后可以将结果强制转换为任何类型的指针。使用void函数,编译器不希望从堆栈中弹出任何内容,因此不会。但/ p>

答案 1 :(得分:1)

是的,你是对的:void函数不会返回任何内容,而指向void的指针可以引用任何数据类型。

答案 2 :(得分:1)

  

我认为它返回了一些未知类型的东西

这是错误的。

当函数的返回类型为void时,表示函数不返回值。

具有以下功能的程序在C:

中无效
void foo(int a)
{
    return 0;
}

答案 3 :(得分:1)

以下是我的编译器在编译时提供的内容

t.c: In function ‘x_function’:
t.c:10:5: attention : ‘return’ with a value, in function returning void [enabled by     default]
t.c: In function ‘main’:
t.c:15:5: attention : passing argument 1 of ‘x_function’ makes pointer from integer without a cast [enabled by default]
t.c:4:6: note: expected ‘void *’ but argument is of type ‘int’
t.c:15:5: erreur: utilisation invalide d'expression void

因此,当函数的返回类型为void时,您无法返回某些内容。

根据输入类型,我认为void *不准确,您可以传递char **类型并将其转换为您想要的任何类型。这是在主函数中使用args在命令行中收集参数的过程,并将其提供给您的程序。

答案 4 :(得分:0)

您错了。为正确起见,请执行以下操作:

int x = ((int(*)(void*)x_function)(520);

答案 5 :(得分:-2)

如果在c编程中使用指针,则可以从void函数返回值。