我真的需要这个,因为我正在使用SWIG并且需要进行转换以匹配函数定义。
函数定义接受
SomeType const * const variable_name[]
此外,另一个问题是─ 如何分配内存
SomeType * variable[] = <??? using new or malloc >
用于x
条目?
编辑:
我搜索了很多,但我一直磕磕绊绊地使用新的SomeType**
将内存分配给SomeType*[x]
,即
SomeType** variable = new SomeType*[x];
你能告诉我一种方法吗?
答案 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
应包含多少项,并且您希望它会增长,那么这将非常有用。
我不明白为什么人们不再读书了。这是最快,最便宜的(如果你考虑工时成本)从一个有信誉的人物中正确学习的方法。