#include <stdio.h> int *findMax(int *arr, int n, int *index); int main(){ int arr[] = {1, 3, 5, 7, 9}; int index; int *b = findMax(arr, sizeof(arr)/sizeof(arr[0]), &index); printf("最大元素是:%d\n 最大元素的下标值是:%d\n 最大元素的地址是:%p\n",*b, index, b); return 0; } int *findMax(int *arr, int n, int *index){ int max = *arr; *index = 0; for(int i = 0; i < n; i++) { if(max < *(arr+i)) { max = *(arr+i); *index = i; } arr++; } return &arr[*index]; }这段代码的问题是什么
时间: 2024-03-21 08:38:21 浏览: 52
2019年C语言期末考试题与答案.doc
这段代码在 `findMax` 函数中使用了 `arr++` 操作,导致指针变量 `arr` 指向了数组的下一个元素,而不是原始数组中的元素。
这种操作会导致在后续的循环中出现错误,因为指针变量指向了错误的地址。正确的操作应该是在循环中使用 `arr[i]` 或 `*(arr+i)` 来访问数组元素,而不是使用指针变量递增的方式来访问。
因此,该代码应该修改为:
```c
#include <stdio.h>
int *findMax(int *arr, int n, int *index);
int main() {
int arr[] = {1, 3, 5, 7, 9};
int index;
int *b = findMax(arr, sizeof(arr)/sizeof(arr[0]), &index);
printf("最大元素是:%d\n 最大元素的下标值是:%d\n 最大元素的地址是:%p\n",*b, index, b);
return 0;
}
int *findMax(int *arr, int n, int *index) {
int max = *arr;
*index = 0;
for(int i = 0; i < n; i++) {
if(max < *(arr+i)) {
max = *(arr+i);
*index = i;
}
}
return &arr[*index];
}
```
这样修改后,代码就可以正确地查找数组中的最大值,并返回最大值的指针。
阅读全文