1. 程式人生 > >C++中函式返回陣列指標的幾種方法總結

C++中函式返回陣列指標的幾種方法總結

因為陣列不能被拷貝,所以函式不能返回陣列。不過,函式可以返回陣列的指標或引用。返回陣列指標的方法有以下幾種:     1、方法一:使用類型別名。如下         typedef int arrt[10];//arrT是一個類型別名,它表示的型別是含有10個整數的陣列         using arrT = int[10];//C++11標準新的類型別名宣告語法         arrT* func(int i);  //func返回一個指向含有10個整數的陣列的指標     2、方法二:直接宣告一個返回陣列指標的函式。其形式如下:         Type (*function(parameter_list)) [dimension]         比如:             int (*func(int i) ) [10];//從裡往外分析,首先函式func有一個整形的形參i,func返回一個指標,該指標指向            的是含有10個整形元素的陣列。         需要注意的是上面的形式中括號一定不能省去。對於返回陣列指標的函式的理解可以參考定義陣列指標的方法。如下             int arr[10];             int (*p)[10] = &arr;//對比上面的例子,可以將func返回的結果看作p,所以上面函式返回的型別是陣列指標     3、方法三:使用尾置返回型別。尾置返回型別是C++11新增的語法。在任何函式的定義都能使用尾置返回,但是一般在    返回型別比較複雜的函式中使用。尾置返回型別跟在形參列表後面並且是以->符號開頭。例子如下:         auto func(int i) -> int(*)[10];//通過尾置返回型別語法指定了func返回型別是 int(*)[10],auto主要是為了表示        真正函式的返回型別跟在形參列表之後。     4、方法四:使用decltype關鍵字。這個關鍵字是C++11新增的。使用decltype來返回陣列指標需要知道函式返回的指標    將指向哪個陣列。如下:         int odd[] = {1, 3, 5, 7, 9};         int even[] = {0, 2, 4, 6, 8};         decltype(odd) *arrPtr(int i)         {             return (i % 2) ? &odd : &even;         }     注意decltype並不負責將陣列型別轉換成對應的指標,所以decltype(odd) 的結果是個陣列,該陣列型別與odd相同。所 以要想返回陣列指標還需要再加一個*符號。