#include<stdio.h> void adds1s2(int *,int *,int); int main(void) { int i,j; printf("请输入数组s1的元素个数:"); scanf("%d",&i); int s1[i]; printf("请输入s1的元素:"); for(j=0;j<i;j++) { scanf("%d",s1); &s1 + 1; } int n,m; printf("请输入数组s2的元素个数:"); scanf("%d",&n); int s2[n]; printf("请输入s2的元素:"); for(m=0;m<n;m++) { scanf("%d",s2); &s2 + 1; } n = n>m?n:m; adds1s2(s1,s2,n); return 0; } void adds1s2(int * s1,int * s2,int n) { int * p,* q,* v; p = s1; q = s2; int s3[n],i; v = s3; for(i=0;i<n;i++) { *v = *p + *q; v++; p++; q++; } for(i=0;i<n;i++) { printf("%d ",s3[i]); } puts(" "); }输出的s3结果不对,为什么
时间: 2023-12-08 15:03:54 浏览: 55
这段代码中还是存在一些问题:
1. 在输入数组元素时,使用了错误的指针操作&s1 + 1和&s2 + 1,这并不能实现指向下一个元素的功能。正确的做法是使用&s1[j]和&s2[m],或者使用s1+j和s2+m。
2. 在函数adds1s2中,定义了一个大小为n的数组s3,但是n的值可能比实际需要的大小要大,这会导致部分元素没有被正确计算。应该使用动态内存分配函数malloc来为s3分配内存,其大小应该为s1和s2中元素个数的较大值。
3. 在输入数组元素时,仅仅修改了指针指向的地址,并没有将输入的值保存到数组中去。应该使用*s1和*s2来保存输入的值。
下面是修改后的代码,可以正确输出s3的结果:
```c
#include<stdio.h>
#include<stdlib.h>
void adds1s2(int *, int *, int);
int main(void) {
int i,j;
printf("请输入数组s1的元素个数:");
scanf("%d", &i);
int *s1 = (int *)malloc(i * sizeof(int));
printf("请输入s1的元素:");
for(j = 0; j < i; j++) {
scanf("%d", s1 + j);
}
int n,m;
printf("请输入数组s2的元素个数:");
scanf("%d", &n);
int *s2 = (int *)malloc(n * sizeof(int));
printf("请输入s2的元素:");
for(m = 0; m < n; m++) {
scanf("%d", s2 + m);
}
n = n > i ? n : i;
adds1s2(s1, s2, n);
free(s1);
free(s2);
return 0;
}
void adds1s2(int *s1, int *s2, int n) {
int *p, *q, *v;
p = s1;
q = s2;
int *s3 = (int *)malloc(n * sizeof(int));
v = s3;
for(int i = 0; i < n; i++) {
*v = *p + *q;
v++;
p++;
q++;
}
for(int i = 0; i < n; i++) {
printf("%d ", *(s3 + i));
}
puts("");
free(s3);
}
```
阅读全文