-4

我教科书中的问题是:

编写一个函数,该函数返回一个指向浮点数的指针并具有两个参数:1)一个带有 COL 列的两个暗淡浮点数组和 2)一个表示行数的整数。返回的指针应指向一个浮点数组,该数组包含 2 dim 数组的相应行中元素的总和。

我的解决方案是:

float* ptr (float array[][COL], int rows) {
    float *ptr;
    int j; 

    for (j=0; j<COL; j++)
        *ptr += array[rows][j];

    return *ptr; 
}

我只是想知道这个解决方案是否正确?非常感谢。

4

1 回答 1

1

你没有分配任何内存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]) } ;
于 2013-06-27T05:56:29.773 回答