#include<stdio.h> void mySum(int *p,int len,int *sumOdd,int *sumEven){ int a[len]; int sum1=0,sum2=0; *p = a; for(int i=0;i<len;i++){ if(a[i]%2==0) sum1+=a[i]; else sum2+=a[i]; } *sumOdd = sum2; *sumEven = sum1; } int main(){ int n; scanf("%d",&n); int a[n]; for(int i=0;i<n;i++) scanf("%d",&a[i]); int p,sumOdd=0,sumEven=0; mySum(&p,n,&sumOdd,&sumEven); printf("%d %d",sumOdd,sumEven); return 0; }哪里错误
时间: 2024-03-05 08:54:03 浏览: 19
这段代码有几个错误:
1. 在函数 `mySum` 中定义了一个变量 `int a[len]`,但是没有给它赋初值,所以里面存储的值是未知的,会导致结果出错。
2. 在函数 `mySum` 中,指针 `*p` 被赋值为 `a` 数组的首地址,但是这个地址是在函数内部定义的数组 `a` 的地址,函数执行完毕后就会被释放,所以在主函数中调用 `mySum` 函数时,指针 `p` 指向的地址是无效的。
3. 在主函数中,应该将指针 `p` 赋值为数组 `a` 的首地址,而不是将 `&p` 作为参数传入 `mySum` 函数。
下面是修改后的代码:
```
#include <stdio.h>
void mySum(int *a, int len, int *sumOdd, int *sumEven) {
int sum1 = 0, sum2 = 0;
for (int i = 0; i < len; i++) {
if (a[i] % 2 == 0)
sum1 += a[i];
else
sum2 += a[i];
}
*sumOdd = sum2;
*sumEven = sum1;
}
int main() {
int n;
scanf("%d", &n);
int a[n];
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
int *p = a, sumOdd = 0, sumEven = 0;
mySum(p, n, &sumOdd, &sumEven);
printf("%d %d", sumOdd, sumEven);
return 0;
}
```
注意,函数 `mySum` 中的指针 `a` 直接指向了主函数中定义的数组 `a` 的首地址,因此不需要额外定义数组,也避免了内存释放问题。同时,使用指针 `p` 指向数组 `a` 的首地址,保证了在函数调用之后仍然可以访问数组中的元素。