将SomeType **转换为SomeType * [],反之亦然

时间:2016-03-23 16:46:33

标签: c++ swig

我真的需要这个,因为我正在使用SWIG并且需要进行转换以匹配函数定义。

函数定义接受

SomeType const * const variable_name[]

此外,另一个问题是─ 如何分配内存

SomeType * variable[] = <??? using new or malloc >

用于x条目?

编辑:

我搜索了很多,但我一直磕磕绊绊地使用新的SomeType**将内存分配给SomeType*[x],即

SomeType** variable = new SomeType*[x];

你能告诉我一种方法吗?

2 个答案:

答案 0 :(得分:1)

该函数需要一个指针数组

声明:

SomeType * variable[];

语法无效。

您将需要:

SomeType * * variable;

声明指针SomeType

的指针

您需要分两步执行内存分配 首先,分配指针数组:

variable = new SomeType * [/* some quantity */];

请记住,上面的语句只为指针分配空间。内存内容仍未初始化。

其次,分配指向对象的指针。

for (unsigned int i = 0; i < some_quantity; ++i)
{
  variable[i] = new SomeType;
}

删除时,删除数组前的数组内容:

for (unsigned int i = 0; i < some_quantity; ++i)
{
  delete variable[i];
}
delete[] variable;

答案 1 :(得分:0)

  

函数定义接受

SomeType const * const variable_name[]

我不是C ++的专家,但如果函数参数中的数组声明与C中的相同,那么这是以下类型的同义词:

SomeType const * const * variable_name

也就是说,函数参数中的数组实际上是指针。你的书应该在早期就解释过了。

  

我已经搜索了很多,但是我一直磕磕绊绊地使用新的SomeType * [x],即将内存分配给SomeType **。

SomeType** variable = new SomeType*[x];
     

你能告诉我一种方法吗?

您确实可以使用类似的代码分配SomeType const * const *,因此您已经回答了自己的问题。我假设您也可以像std::vector<SomeType const * const>这样使用:

std::vector<SomeType const * const> *foo = new std::vector<SomeType const * const>();
/* XXX: Add some items to the vector */
SomeType const * const *bar = &foo[0];

如果您不确定foo应包含多少项,并且您希望它会增长,那么这将非常有用。

我不明白为什么人们不再读书了。这是最快,最便宜的(如果你考虑工时成本)从一个有信誉的人物中正确学习的方法。