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相同。所 以要想返回陣列指標還需要再加一個*符號。