我写了两个函数并在main中调用函数 .
函数1 - 我编写了一个函数,它返回void并获取一个int *(指向整数数组的指针)或int [],以及int(表示大小) . 该函数需要将数组的所有元素初始化为非零值 .
函数2 - 我编写了另一个函数,它返回int并获取const int *(指向整数数组的指针)或int [],以及int(表示大小) . 该函数应该对数组的所有元素求和并返回总和 .
在main中,我定义了一个大小为5的整数数组 . 在main中调用函数1来初始化数组的值 . 在main中调用函数2来获取总和并将总和的值打印到控制台 .
My problem is the program runs but the print out for sum we are getting is a large (in the millions), random, number and is not the expected answer of 15. Anyone who can help us get the correct answer would be greatly appreciated
#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);
}
2 回答
不会做你认为它做的事情 . 它实际上计算所有整数常量,但将
ptr[0]
设置为1
(有关更多详细信息,请参阅逗号运算符),将所有其他常量保留为任意值 .请注意,它没有评估
*ptr = (1, 2, 3, 4, 5)
(将*ptr
设置为5
),但实际上正在评估(*ptr = 1), 2, 3, 4, 5
- 这是有效的,因为像42
这样的东西实际上是一个有效的C语句,尽管不是很有用 .如果您尝试将数组设置为增加值,请使用以下内容:
您可能还想在对值进行求和时这样做,因为它应该取决于传入的大小而不是仅仅总和五个值:
此外,您打印的值不是总和,它是包含总和的变量的地址(一个体面的编译器会警告您这一点) . 您应该在
printf
而不是&sum
中使用sum
.而且,作为最后一点,
func2
的签名表明你应该实际返回总和而不是仅仅打印它 . 所以我建议从该函数中删除printf
并简单地执行:然后你可以将
printf
放入调用者(main
),如下所示:注意使用
sizeof(grid) / sizeof(*grid)
,它基本上是grid
中的数组元素的数量 - 这将允许您通过简单地将其在一个地方更改为int grid[42]
来调整grid
,并且仍然使所有代码都使用更新的大小 .对你的代码来说实际上并不是必需的,但是最好尽早养成良好的编程习惯(对于你的函数更具描述性的名称也可能是一个好主意) .
行
*ptr = 1, 2, 3, 4, 5;
指定ptr[0]
值并将其他点单元化,所以当你总结它时,它将是随机存储器 .您应该像这样使用
for
进行初始化和类似的方法来总结它 .