如何在C中使用void指针作为函数返回类型

Jack Zhu

因此,我打算编写一个函数以返回随机数组元素。该函数接受两个参数-空指针数组和数组长度。它应该返回一个空指针。想法是采用给定数组,该数组以void指针数组的形式出现,该函数将返回该数组的随机元素。我的问题是,我需要做些什么来返回一个指针,我需要对“结果”做些什么,以便可以像这样返回它?病房结束后,我需要怎么做才能再次访问它?谢谢

这是我所做的,但是得到了:

 "25: error: invalid use of void expression"

带有以下警告:

" warning: pointer of type ‘void *’ used in arithmetic"

我的代码:

#include<stdlib.h>
#include<stdio.h>
#include<time.h>
void *randomNum(void * array, int length)
{
    void * result;  
    result=array[rand()%(length-1)];
    return result;
}    
int main()
{
int i;
srand(13);
int array[9]={1,5,6,85,132,65463,1354,5863,134};

for (i=0;i<9; i++)
{
    printf("%d\n",*randomNum(array,9));
}



return 0;
}
标签

您可以通过这种方式编写完美的通用函数,但是:

    result = array[rand()%(length-1)];

这是在取消引用void指针的array同时还尝试将其存储到指针中result您要存储的是该偏移量处的地址:

    result = array + rand()%(length-1);

但是,您也不能对void指针执行这样的算术运算,因为基础类型的大小未知(某些编译器允许sizeof(void)==1作为扩展)。对于非空数组,给定元素消耗的字节数,因此在对地址进行算术运算时要增加的字节数被编码为该类型。在像这样的空指针上操作的泛型函数中,您需要显式传递类型的大小。

void *randomNum(void * array, size_t size, size_t length)

现在,通过强制转换array为char指针执行计算,这将强制array以1字节乘以提供的size参数的增量进行算术运算

    result = (char*)array + (rand()%(length-1)) * size;
                   ^                            ^

然后,您可以使用 randomNum(array, sizeof(*array), 9)

但是,在取消引用函数之前,仍然需要转换该函数的返回值。

    printf("%d\n", *(int*)randomNum(array,sizeof(*array),9));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C中使用结构指针作为参数调用void函数?

来自分类Dev

如何在C ++中使用函数的参数作为指针从DLL返回值?

来自分类Dev

在C ++中使用指针或引用作为函数的返回类型是否有经验法则?

来自分类Dev

在C函数中使用指针作为返回值

来自分类Dev

如何在Rust中使用方法作为函数指针

来自分类Dev

如何在Rust中使用方法作为函数指针

来自分类Dev

您如何在C中使用void指针?

来自分类Dev

您如何在C中使用void指针?

来自分类Dev

如何在不使用C语言中使用typedef的情况下声明将指针返回到返回函数指针的函数的函数?

来自分类Dev

如何在c中使用带有参数的函数指针?

来自分类Dev

如何在PHP函数中使用指针?

来自分类Dev

如何在函数指针中使用noreturn?

来自分类Dev

如何在PHP函数中使用指针?

来自分类Dev

如何在Emscripten中包装或调用带有void作为返回值的C函数?

来自分类Dev

如何在python中通过C函数操作C类型指针返回?

来自分类Dev

关于函数作为指针的返回类型的困惑

来自分类Dev

C++。如何返回空指针而不是函数返回类型?

来自分类Dev

如何在C ++中使用多个定界符拆分char指针并返回char指针数组?

来自分类Dev

c-在函数调用中使用从函数返回的指针

来自分类Dev

c-在函数调用中使用从函数返回的指针

来自分类Dev

如何确定以void *返回的指针的类型(类)?

来自分类Dev

有没有办法在不使用void指针的情况下返回C函数中的任何类型?

来自分类Dev

我可以在C ++ Actor框架中使用C ++ 11智能指针作为消息返回类型吗?

来自分类Dev

我如何使用下标访问作为函数返回的指针的数组?

来自分类Dev

如何在函数指针中使用函数地址?

来自分类Dev

为什么我们在c中使用函数返回指针以及函数返回指针的应用

来自分类Dev

如何在C#中使用C字节指针函数的dll?

来自分类Dev

如何在Objective-C函数中返回C ++指针

来自分类Dev

如何在vscode中使用jsdoc在包装函数中正确获取返回值的推断类型?

Related 相关文章

  1. 1

    如何在C中使用结构指针作为参数调用void函数?

  2. 2

    如何在C ++中使用函数的参数作为指针从DLL返回值?

  3. 3

    在C ++中使用指针或引用作为函数的返回类型是否有经验法则?

  4. 4

    在C函数中使用指针作为返回值

  5. 5

    如何在Rust中使用方法作为函数指针

  6. 6

    如何在Rust中使用方法作为函数指针

  7. 7

    您如何在C中使用void指针?

  8. 8

    您如何在C中使用void指针?

  9. 9

    如何在不使用C语言中使用typedef的情况下声明将指针返回到返回函数指针的函数的函数?

  10. 10

    如何在c中使用带有参数的函数指针?

  11. 11

    如何在PHP函数中使用指针?

  12. 12

    如何在函数指针中使用noreturn?

  13. 13

    如何在PHP函数中使用指针?

  14. 14

    如何在Emscripten中包装或调用带有void作为返回值的C函数?

  15. 15

    如何在python中通过C函数操作C类型指针返回?

  16. 16

    关于函数作为指针的返回类型的困惑

  17. 17

    C++。如何返回空指针而不是函数返回类型?

  18. 18

    如何在C ++中使用多个定界符拆分char指针并返回char指针数组?

  19. 19

    c-在函数调用中使用从函数返回的指针

  20. 20

    c-在函数调用中使用从函数返回的指针

  21. 21

    如何确定以void *返回的指针的类型(类)?

  22. 22

    有没有办法在不使用void指针的情况下返回C函数中的任何类型?

  23. 23

    我可以在C ++ Actor框架中使用C ++ 11智能指针作为消息返回类型吗?

  24. 24

    我如何使用下标访问作为函数返回的指针的数组?

  25. 25

    如何在函数指针中使用函数地址?

  26. 26

    为什么我们在c中使用函数返回指针以及函数返回指针的应用

  27. 27

    如何在C#中使用C字节指针函数的dll?

  28. 28

    如何在Objective-C函数中返回C ++指针

  29. 29

    如何在vscode中使用jsdoc在包装函数中正确获取返回值的推断类型?

热门标签

归档