【问题标题】:how to convert elements of void type to an integer array type?如何将 void 类型的元素转换为整数数组类型?
【发布时间】:2014-03-30 04:02:52
【问题描述】:

// 将 void x 的元素转换为整数数组

int elem(void* x,int size){

 int* temp = new temp[size];
 for(int i = 0;i < size ; i++){
     temp[i] = (int*)x[i]; //  <--- this is what i want
 // assign all element of x to temp
 }    
}

int main(){

        int a[] = {1,2,3,4,5,6,7,8,9,10};
        int num = elem(&a,10);

}

【问题讨论】:

  • 您确定需要void * 吗? elem 是做什么的?
  • elem 返回x的元素个数
  • 改用模板。否则,将其设为 int*。
  • 没错。模板可以很好地获取数组的大小。 void * 没有,因为您必须传递大小才能知道。当然,你也可以使用std::array,直接使用.size()
  • 这不是我关心的问题。我只需要将 x 的所有元素转换为 temp 数组并返回 temp 的元素数。

标签: c++ arrays void


【解决方案1】:

main() 中应该是int num = elem(&amp;a[0]);,并在函数中输入int *int_ptr = (int *)x;,然后使用int_ptr

elem 函数无法知道数组中有多少元素,因此您要么必须将其作为第二个参数传递,要么使用其他参数来代替 void *

或者,您可以在a[] 的末尾放置一个标记值,类似于字符串使用'\0' 来指示其结束的方式。

【讨论】:

  • 是的。初始化后没有合理的方法来获取数组大小,除非您跟踪它。另外,使用 reinterpret_cast 或 static_cast。
  • 也许即使我添加了一个大小参数而不是再次如何将所有元素分配给临时 int 数组元素?
  • 您的意思是要在elem 函数中创建一个新数组并复制a 中的所有元素?
  • 您想将所有元素复制到一个新数组中吗?
  • 马特,那不是标准的 C++。此外,您应该使用 std::copy。
猜你喜欢
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多