您還沒有爲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]) } ;
不,並且此代碼也不會編譯。 – cwallenpoole
請修復您的語法錯誤,例如'arry'和'array',COL是什麼類型? – Nobilis
@Nobilis完成,對不起。 COL也是一個int – user2517940