2011-04-08 62 views
1

我想了解C++返回值参数中的数据?

void getval(const int record, int32* val, bool allowExc) const; 

void getval(const int record, vector<int32>* value, bool allowExc) const; 

我需要返回int32s列表之间的区别。第一个例子可以返回ints32s的列表还是仅返回一个? 任何帮助表示赞赏

+1

所以你问什么'vector'是?或者天使托架代表什么?或者完全不同的东西? – delnan 2011-04-08 22:30:44

+1

这是一个诡计问题吗?差别不是不言而喻吗?第一个参数是第二个参数的'int32 *',第二个参数是'vector *'... – ildjarn 2011-04-08 22:31:57

回答

1

的区别是明显vector<int32>*之间int32*。虽然这两者基本上是相同的事情,但您应该知道int32*是原始数据类型(指向int32的数组的指针),而vector是STL(标准模板库)类,在此情况下为int32的数组,同时提供选项,如:

  • 出界检查([]操作者)
  • 大小的向量(大小功能)的
  • 载体(容量函数)的最大容量
  • 方法用于保留更多的字节如果需要(备用功能)

您没有任何这些与原始数据类型。

所有关于矢量模板类,你可以找到它的help page

0

第一个函数将val参数作为指向int32的单个指针,而第二个函数将value参数作为指向int32向量的指针。 (一个向量可以存储多个相同类型的变量)

3

这两个函数都带3个参数,不返回任何值,也不修改它们关联的对象。区别在于第二个参数。

第一个函数需要一个指向int32(这可能是,但不一定是一个32位有符号整数)的指针。这可能是指向数组的第一个元素的指针或指向单个值的指针。该值可以由函数修改。

第二个函数需要一个指向int32向量的指针。这是一个数组,因为它是一个非常量参数,所以该函数可以修改该向量(小心)。一个向量在普通指针上的许多优点之一就是可以找出向量中有多少元素,但函数无法告诉与该指针关联的数组中有多少元素,除非另外两个参数表示大小。


更新质疑:

我需要返回int32s列表。第一个例子可以返回ints32s的列表还是仅返回一个?

第一个函数可以为其调用者分配的内存赋值,但不能有用地分配内存并将其传递给调用者。如果调用者传入一个指向int32值的列表(数组)的指针,那么该函数可以覆盖该列表;它(不言而喻)知道这份名单有多大。

第二个函数获取指向int32值的向量的指针。该函数可以为该指针分配一个新的向量,并留下前一个值如何释放(或泄漏)的问题。它也可以简单地修改矢量,但在这种情况下,引用会更容易理解。该向量将负责内存管理。

0

有时,参数用于返回值。在这种情况下,val是指向int32的指针,因此我们可以写入*val并在那里留下值。对于value,我们可以做类似value->push_back(an int32 value)(*value)[0] = an int32 value

0

只是想知道,为什么不使用向量作为参考参数(即,vector<int32>& value)?