我是 C 的新手,我有一個任務,其中函式回傳陣列中元素的 MIN 和 MAX 值。但我也必須從帶有 'NULL' 引數的函式回傳值,我不明白。
我的代碼:
int array_min(const int [], const int);
int array_max(const int [], const int);
int main() {
int input_arr[] = {2,3,4,5,6};
printf("%d\t", array_min(input_arr, 5));
// : 2
printf("%d\t", array_max(input_arr, 5));
// : 6
printf("%d\t", array_max(NULL, 5));
// : -1
return 0;
}
int array_min(const int input_arr[], const int arr_size) {
int a, b = arr_size, min = input_arr[0];
for(a = 0; a < b; a ) {
if(input_arr[a] < min) {
min = input_arr[a];
}
}
return min;
}
int array_max(const int input_arr[], const int arr_size) {
int a, b = arr_size, max = input_arr[0];
for(a = 0; a < b; a ) {
if(input_arr[a] > max) {
max = input_arr[a];
}
}
return max;
}
所以,我的問題是,如何在函式中使用 'NULL' 來獲得回傳值 -1?
感謝所有的答案。我非常感謝他們。
uj5u.com熱心網友回復:
它是@chux-ReinstateMonica答案的修改版本,因此請對他的答案(和 DV 是其中之一)進行一些更改。
- 使用
size_t(notint) 表示尺寸。 - 如果可能,請嘗試從函式中獲得一個回傳點
- 無需檢查索引,
0因為它將等于min值 - 在這種情況下,最好保留值和最小值的索引而不是指向它的指標(這將有助于編譯器優化代碼)
const int *array_min1(const size_t arr_size, const int input_arr[arr_size]) {
const int *result = arr_size ? input_arr : NULL;
if (result)
{
size_t a, min_index = 0;
int min = input_arr[0];
for(a = 1; a < arr_size; a ) {
if(input_arr[a] < min) {
min = input_arr[a];
min_index = a;
}
}
result = input_arr min_index;
}
return result;
}
uj5u.com熱心網友回復:
如何在函式中使用“NULL”來獲取回傳值 -1?
引數輸入驗證是一項常見任務。前面的簡單測驗。
當輸入很麻煩時:
int array_min(const int input_arr[], const int arr_size) {
if (input_arr == NULL || arr_size <= 0) {
return -1;
}
...
錯誤回傳 -1 是一個弱設計選擇,因為它與 -1 的良好回傳無法區分:
int input_arr[] = {-1, 2, 3, 4, 5};
printf("%d\t", array_min(input_arr, 5));
函式回傳陣列中元素的 MIN 和 MAX 值。
考慮改為:回傳最小值/最大值的地址。NULL錯誤回傳。
// int array_min(const int input_arr[], const int arr_size) {
const int *array_min(const int input_arr[], const int arr_size) {
if (input_arr == NULL || arr_size <= 0) {
return NULL;
}
//int a, b = arr_size, min = input_arr[0];
int a, b = arr_size;
const char *min = &input_arr[0];
// for(a = 0; a < b; a ) {
for(a = 1; a < b; a ) { // No need to test input_arr[0]
//if(input_arr[a] < min) {
if(input_arr[a] < *min) {
//min = input_arr[a];
min = &input_arr[a];
}
}
return min;
}
現在呼叫代碼可以檢測故障。
// printf("%d\t", array_min(input_arr, 5));
const int *min = array_min(input_arr, 5);
// or
const int *min = array_min(input_arr, 0);
// or
const int *min = array_min(NULL, 5);
if (min) {
printf("%d\t", *min);
} else {
printf("Min not found\t");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/344632.html
