c/c++语言开发共享如果我有一个void指针,我该如何将int放入其中?

我有一个任意值的数组,所以我将它定义为一个void指针数组,所以我可以指向任何类型的信息(如int ,字符数组等)。 但是,我如何实际为其分配一个int

以这些初始化为例:

 void* data[10]; int x = 100; 

我的直觉会想到这一点,但这会产生编译错误:

 data[0] = malloc(sizeof(int)); *(data[0]) = x; 

我还想过使用&x ,但我会取一个局部变量的地址,这个(据我所知)将在退出程序后被清除。 所以,如果我有一个局部变量x ,我怎样才能正确地将它变为void指针类型的变量?

     *((int*)data[0])=x; 

    会做的。

    您可能想考虑使用联合。 像这样的东西:

     union myvalues { int i; double d; long l; }; 

    你可以拥有

     union myvalues *foo[10]; foo[0] = malloc(sizeof(union myvalues)); foo[0]->i = x; 

    你也可以输入typedef union。 sizeof(union myvalues)将是成员的最大sizeof 。 所以如果你有int i; 在联合中的char c[40]sizeof(union myvalues)将为40.然后写入i将覆盖c的前4个字符(假设你的整数是4个字节)。

     *((int *)data[0]) = x; 

    将制作x的副本,因此它是局部变量的事实并不重要。

    虽然您可以使用强制转换进行分配,但编写代码可能更清晰:

      void * data [10];  int x = 100;  int * p;   p = malloc(sizeof * p);  data [0] = p;  * p = x; 

    出于别名的原因,它做得更好

     mempcy( data[0], &x, sizeof( int ) ); 

    当发生这种情况时,编译器将优化memcpy调用,因为sizeof(int)是一个常量值,但它不会破坏各种别名规则。

    试试这个:

     data[0] = malloc(sizeof(int)); *((int*)data[0]) = x; 

    要么

     (int) (*(data[0])) = x; 

    别忘了

     free (data[0]); 

    然后。

    需要了解更多c/c++开发分享如果我有一个void指针,我该如何将int放入其中?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享如果我有一个void指针,我该如何将int放入其中?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/980557.html

      (0)
      上一篇 2021年12月14日
      下一篇 2021年12月14日

      精彩推荐