#include <stdio.h> int max_val (int *a, int n);//返回值为n个数的最大值 int main() { int *sum; int n; printf("请输入n个整形值:"); scanf_s("%10d", &n); max_val ( *sum , n ); return 0; } int max_val (int *a, int n) { int max = *a; for (int i = 1; i < n; i++) { if (*(a + 1) > max) max = *(a + 1); return max; }哪里有问题
时间: 2023-12-11 12:05:49 浏览: 70
这段代码有几个问题:
1. 在 `main` 函数中,你定义了一个 `int *sum` 指针变量,但没有为它分配内存。你需要使用 `malloc` 函数为其分配内存,或者直接使用一个数组。
2. 在调用 `max_val` 函数时,你使用了 `*sum`,这将解引用 `sum` 指针。但是在这之前 `sum` 并没有被初始化,解引用一个未初始化的指针是不安全的。
3. 在 `max_val` 函数中,你使用了 `*(a + 1)` 来访问数组元素,但是应该使用 `*(a + i)` 来访问第 `i` 个元素。
4. 在 `max_val` 函数中,你在循环内部使用了 `return` 语句,这会导致函数在第一次循环迭代中就返回了。
修正后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
int max_val(int *a, int n);
int main() {
int *sum;
int n;
printf("请输入n个整形值:");
scanf_s("%10d", &n);
sum = (int*)malloc(n * sizeof(int)); // 分配内存
printf("请输入%d个整数:", n);
for (int i = 0; i < n; i++) {
scanf_s("%d", &sum[i]);
}
int max = max_val(sum, n);
printf("最大值为:%d", max);
free(sum); // 释放内存
return 0;
}
int max_val(int *a, int n) {
int max = *a;
for (int i = 1; i < n; i++) {
if (*(a + i) > max) {
max = *(a + i);
}
}
return max;
}
```
在 `main` 函数中,我们使用了 `malloc` 函数为指针变量 `sum` 分配了 `n` 个整数的内存空间,然后使用循环读取用户输入的整数。在计算最大值之后,我们使用 `free` 函数释放了内存空间。
阅读全文