2014-04-09 44 views
-5

像這樣在C++中返回指向數組的指針是否有效?是返回*數組;有效?

int* function(int n){ 
    int i; 
    for(i = 0; i<=n ; i++){ 
     int array[i] = i; 
    } 
    return *array; 
} 

什麼是正確的方法?

+0

correction int * function()... – danslz

+0

您可以使用[edit]進行更正而不是評論。 – dasblinkenlight

+1

你能否確認你的例子是否意味着在一個範圍內定義了'array',而這個範圍不能被return語句訪問? – Avery

回答

0

是的,沒有。是的,因爲這是你應該歸還它的方式。不,因爲您應該(並且必須)使用new[]運算符(或malloc函數)。所以基本上你應該寫:

int* function(int n){ 
int i = 0; 
int *array = new int[n]; // or c-style malloc(n*sizeof(int)) 
for(i = 0; i<=n ; i++){ 
    array[i] = i; 
} 
return array; 
} 

爲什麼?因爲如果你使用int array[i]創建一個數組,它將在函數結束時「消失」(全部關於可變範圍)。

+0

*數組?是和不是? – 4pie0

+0

沒有,對不起,這是不好的建議。你應該**不**在這裏使用'malloc'或'new'。 –

+0

@ privatedatapublicchannel2我不好。現在似乎是固定的。 – elwin013

1

你的代碼甚至不能編譯。如果你的意思是這樣的:

int *foo() 
{ 
    int x[5] = { 0 }; 
    return x; 
} 

那麼這段代碼是不正確的,因爲數組x停止foo()返回時存在,使指針不再指向有效的存儲。

選項爲:

  • 具有呼叫者分配空間和函數寫入到該空間
  • 返回保持陣列的容器中,如用C std::vector ++
  • 返回一個指向在C中動態分配數組。調用者在完成時必須記住free
0

是否有效返回一個指針指向C++中的數組?

號你的榜樣將不能編譯:

error: ‘array’ was not declared in this scope 

http://ideone.com/h17cH1

這是確定以返回一個指針數組,如果這個數組不自動變量,所以它仍然在函數返回後存在。在例如:

int* function(int n){ 
    int * array = new int[i](); 
    return array; 
} 

雖然不美麗,因爲它不是很明顯誰應該刪除陣列和時間。