2013-06-27 53 views
-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; 
} 

我只是想知道這個解決方案是否正確?非常感謝你。

+1

不,並且此代碼也不會編譯。 – cwallenpoole

+1

請修復您的語法錯誤,例如'arry'和'array',COL是什麼類型? – Nobilis

+0

@Nobilis完成,對不起。 COL也是一個int – user2517940

回答

1

您還沒有爲ptr分配任何內存來指向,所以答案是不可避免的錯誤。您必須確保內存持續足夠長時間才能使用,因此您不能將指針返回到自動數組;你要麼必須有一個靜態數組(但你如何使它足夠大),或者你必須動態分配內存(malloc()等),然後確保調用代碼釋放分配的內容。

您也有算法問題。您將所有行的所有值累加到一個值中,而請求您爲每行計算一個單獨的值。

另外,*ptrfloat;您只需要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]) } ;