gpt4 book ai didi

c - 使用指针算法对数字求和

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:48 25 4
gpt4 key购买 nike

我的任务是编写一段代码,该代码接受用户输入的数字并提供其总和,特别是通过使用指针算法,即不允许数组下标 a[i]。

下面是我编写的代码,经过编译甚至运行。但几乎总是它给出输入数字的总和为 0。我试图修复它,但无济于事。因此,我正在寻求帮助,非常感谢任何帮助。

#include<stdio.h>
#define N 5

int sum_array( const int *p, int n)
{
int sum, a[N];
sum = 0;

for(p=&a[0]; p<&a[N]; p++)
sum += *p;

return sum;
}


int main()
{
int a[N], *i,x;

printf("Enter %d Numbers: ", N);

for(i=a; i<a+N; i++)
scanf("%d", i);
// all the input values get scanned as i or the array a

x= sum_array(i,N);
printf("the sum is %d\n", x);

return 0;
}

最佳答案

请注意,您正在 mainsum_array 中声明数组 int a[N]。它们在不同的范围内,因此它们是不同的数组(sum_array 中的数组从未初始化,因此读取它会调用未定义的行为)。

正确的方法是传递数组及其使用的长度:

这是一个固定版本:

#include<stdio.h>
#define N 5

int sum_array( const int *a, int n) // a points to a array of at least n elements
{
int sum = 0; // initialize at definition time

for(const int *p=a; p<&a[n]; p++) // have the pointer p take all values from a
sum += *p;

return sum;
}


int main()
{
int a[N], *i,x;

printf("Enter %d Numbers: ", N);

for(i=a; i<a+N; i++)
scanf("%d", i);
// all the input values get scanned as i or the array a

x= sum_array(a,N); // pass the array address, not a pointer past last element
printf("the sum is %d\n", x);

return 0;
}

最后,这主要是个人喜好问题,但我经常因为尝试在没有大括号的 for 循环中添加指令而焦头烂额,所以我强烈建议使用 always 大括号循环:

  for(i=a; i<a+N; i++) {
scanf("%d", i);
}

关于c - 使用指针算法对数字求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50155739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com