在 C 中推薦使用什么選項從函式回傳陣列?
選項1:
void function_a(int *return_array){
return_array[0] = 1;
return_array[1] = 0;
}
選項 2:
int* function_b(){
int return_array[2];
return_array[0] = 1;
return_array[1] = 0;
return return_array;
}
uj5u.com熱心網友回復:
這個功能
int* function_b(){
int return_array[2];
return_array[0] = 1;
return_array[1] = 0;
return return_array;
}
回傳指向具有自動存盤持續時間的本地陣列的第一個元素的指標,該陣列在退出函式后將不再存在。
所以回傳的指標將是無效的,取消參考這樣的指標會呼叫未定義的行為。
如果陣列是動態分配的或具有靜態存盤持續時間(即使用存盤類說明符宣告時),則可以從函式回傳指向陣列第一個元素的指標static。
至于第一個函式,那么如果你也傳遞陣列中元素的數量會更安全
void function_a(int *return_array, size_t n );
在函式中,您將能夠檢查傳遞的值。
uj5u.com熱心網友回復:
我最喜歡:
void function_a(int return_array[const], size_t sz) {
return_array[0] = 1;
return_array[1] = 0;
}
因為它清楚地表明引數是一個陣列,而且它也清楚地表明傳入的陣列的大小,使得越界索引不太可能成為問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534151.html
標籤:数组C指针返回值函数定义
上一篇:這在C中使用不安全嗎?
