像這樣在C++中返回指向數組的指針是否有效?是返回*數組;有效?
int* function(int n){
int i;
for(i = 0; i<=n ; i++){
int array[i] = i;
}
return *array;
}
什麼是正確的方法?
像這樣在C++中返回指向數組的指針是否有效?是返回*數組;有效?
int* function(int n){
int i;
for(i = 0; i<=n ; i++){
int array[i] = i;
}
return *array;
}
什麼是正確的方法?
是的,沒有。是的,因爲這是你應該歸還它的方式。不,因爲您應該(並且必須)使用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]
創建一個數組,它將在函數結束時「消失」(全部關於可變範圍)。
你的代碼甚至不能編譯。如果你的意思是這樣的:
int *foo()
{
int x[5] = { 0 };
return x;
}
那麼這段代碼是不正確的,因爲數組x
停止foo()
返回時存在,使指針不再指向有效的存儲。
選項爲:
std::vector
++free
。是否有效返回一個指針指向C++中的數組?
號你的榜樣將不能編譯:
error: ‘array’ was not declared in this scope
這是確定以返回一個指針數組,如果這個數組不自動變量,所以它仍然在函數返回後存在。在例如:
int* function(int n){
int * array = new int[i]();
return array;
}
雖然不美麗,因爲它不是很明顯誰應該刪除陣列和時間。
correction int * function()... – danslz
您可以使用[edit]進行更正而不是評論。 – dasblinkenlight
你能否確認你的例子是否意味着在一個範圍內定義了'array',而這個範圍不能被return語句訪問? – Avery