C:通过void*返回的函数

And*_*NER 4 c memory malloc pointers void-pointers

来自Java我很困惑使用Void允许返回值如下:

void *emalloc(size_t s) {  
    void *result = malloc(s);  
    if (NULL == result) {  
        fprintf(stderr, "MEMORY ALLOCATION FAILURE\n");  
    exit( EXIT_FAILURE );  
    }  
    return result;  
}  
Run Code Online (Sandbox Code Playgroud)

这会返回指向分配内存的指针吗?

Amb*_*ber 15

是的.void*指针基本上是指向内存地址的通用指针,然后通常可以对实际需要的任何类型进行类型转换.

  • void*可以始终转换为对象指针,但不一定转换为函数指针.该转换的可靠性取决于实现. (2认同)

Wil*_*ell 9

您的问题表明您误读了函数的返回类型.两者之间有很大的不同:

void foo( void ) {}

void *bar( void ) {}

foo()不接受任何参数并且不返回值,而bar()不接受任何参数并返回通用指针.在C中,关键字void用于表示通用指针,void*类型的对象可以转换为任何其他对象指针类型而不会丢失信息.


Jar*_*Par 5

是的,此函数返回指向指定大小的已分配内存的指针.它在malloc中的不同之处在于它保证返回一个指针.失败时它将退出应用程序.