gpt4 book ai didi

c - 如何在不获取大量随机输出的情况下正确求和数组的元素

转载 作者:太空宇宙 更新时间:2023-11-04 00:44:56 24 4
gpt4 key购买 nike

我写了两个函数并调用了main中的函数。

函数 1 – 我编写了一个返回 void 并接受 int *(指向整数数组的指针)或 int[] 和 int(用于大小)的函数。该函数需要将数组的所有元素初始化为非零值。

函数 2 – 我编写了另一个返回 int 并接受 const int *(指向整数数组的指针)或 int[] 和 int(表示大小)的函数。该函数应对数组的所有元素求和并返回总和。

在 main 中,我定义了一个大小为 5 的整数数组。在 main 中调用函数 1 来初始化数组的值。在 main 中调用函数 2 获取总和并将总和的值打印到控制台。

我的问题是程序运行但我们得到的总和的打印输出是一个很大(数百万)的随机数字,而不是预期的答案 15。任何可以帮助我们得到正确答案的人不胜感激

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#pragma warning(disable: 4996)

void func1(int* ptr, int size);
int func2(const int* ptr, int size);

int main()
{
int grid[5];

func1(grid, 5);
func2(grid, 5);
}

void func1(int* ptr, int size)
{
*ptr = 1, 2, 3, 4, 5;
}

int func2(const int* ptr, int size)
{
int sum;

sum = ptr[0] + ptr[1] + ptr[2] + ptr[3] + ptr[4]; // *(ptr + 0); putting an asterisk makes it so that it changes the entire "ptr" value and the "[0]" value

printf("\n\nThe sum of the integers in the array is %d.\n\n", &sum);
}

最佳答案

*ptr = 1, 2, 3, 4, 5;

做你认为它做的事。它实际上评估所有整数常量,但将 ptr[0] 设置为 1(有关更多详细信息,请参阅逗号运算符),将所有其他常量保留为某个任意值。

请注意,它评估*ptr = (1, 2, 3, 4, 5)(这将设置*ptr5) 但实际上正在评估 (*ptr = 1), 2, 3, 4, 5 - 这是可行的,因为像 42 这样的东西是实际上是一个有效的 C 语句,尽管不是很有用。

如果你试图将数组设置为增加值,只需使用类似的东西:

for (int i = 0; i < size; i++)
ptr[i] = i + 1;

您可能还想在对值求和时这样做,因为它应该取决于传入的大小,而不是仅仅对五个值求和:

int sum = 0;
for (int i = 0; i < size; i++)
sum += ptr[i];

此外,您打印出的值不是总和,而是包含总和的变量的地址(一个体面的编译器会警告您这一点)。您应该在 printf 中使用 sum 而不是 &sum

最后一点,func2 的签名表明您实际上应该返回总和,而不是仅仅打印它。所以我建议从该函数中删除 printf 并简单地执行以下操作:

return sum;

然后你可以将printf放入调用程序(main),如下所示:

int main(void)
{
int grid[5];

func1(grid, sizeof(grid) / sizeof(*grid));
int sum = func2(grid, sizeof(grid) / sizeof(*grid));
printf("The sum of the integers in the array is %d.\n\n", sum);
return 0;
}

请注意 sizeof(grid)/sizeof(*grid) 的使用,它基本上是 grid 中数组元素的数量 - 这将允许您调整大小 grid 通过简单地将它的 一个 位置更改为 int grid[42] 之类的东西,并且所有代码仍然可以使用更新后的大小。

您的代码实际上不需要,但最好尽早养成良好的编程习惯(为您的函数使用更具描述性的名称也可能是个好主意)。

关于c - 如何在不获取大量随机输出的情况下正确求和数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45249762/

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