2011-04-08 94 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)?