你没有分配任何内存ptr
来指向,所以答案不可避免地是错误的。您必须确保内存能够持续足够长的时间以供使用,因此您不能返回指向自动数组的指针;您要么必须拥有一个静态数组(但是如何使其足够大),要么必须动态分配内存(malloc()
等),然后确保调用代码释放分配的内容。
你也有算法问题。您将所有行的所有值累积为一个值,而您被要求为每一行计算一个单独的值。
另外,*ptr
是一个float
;你只需要return ptr;
正确的类型。
您的函数名称也需要不同。
#include <stdio.h>
#include <stdlib.h>
enum { COL = 7 };
float *row_sums(float array[][COL], int rows)
{
float *ptr = malloc(rows * sizeof(*ptr));
if (ptr != 0)
{
for (int i = 0; i < rows; i++)
for (int j = 0; j < COL; j++)
ptr[i] += array[i][j];
}
return ptr;
}
int main(void)
{
float data[][COL] = { { 1.0 }, { 2.0 }, { 0.0, 3.0 }, { -1.0, -2.0 } };
float *result = row_sums(data, 4);
for (int i = 0; i < 4; i++)
printf("%d: %.1f\n", i, result[i]);
free(result);
return(0);
}
的使用4
是次优的;它应该类似于ROWS
,其中使用以下方式定义:
enum { ROWS = sizeof(data) / sizeof(data[0]) } ;