2012-01-11 44 views
1

我有矩陣M:靜態的基質鑄造的指針

float M[4][3] = { 
    0, 0, 0, 
    0, 1, 1, 
    1, 0, 1, 
    1, 1, 0}; 

,我需要與使用目的的方法「foo」的投瑪:

foo(float **matrix){ 
    printf("%f",matrix[0][0]); 
} 

我成功地編譯的代碼使用:

foo((float**) M) 

但是當我執行它時,我得到了段錯誤。哪裏不對?我在Ubuntu Oneiric中使用g ++。

在此先感謝。


好,感謝Luchian,而是使用的是什麼:

float **M = new float*[4]; 
M[0] = {0,0,0}; 

我知道,它不會編譯,但它類似的東西?

+0

見http://stackoverflow.com/a/4810676/78845 – Johnsyweb 2012-01-11 22:27:26

+0

@ juanma2268:一般規則的拇指,如果你需要一個施法使一些編譯那麼它就是_often_(並不總是)錯誤,你的演員隱藏了一個問題。我認爲這裏就是這種情況。 – AAT 2012-01-11 23:00:07

回答

0

好了,老最好的:

float **M = new float*[4]; 
for(int i=0; i<4; i++){ 
    M[i] = new float[3]; 
    for(int j=0; j<3; j++){ 
     M[i][j] = something... 
    } 
} 
0

如果你希望(或需要)做ARITH自己,避免投:

void foo(float **pmatrix) 
{ 
    float *matrix = *pmatrix; 

    for (int r = 0; r < 4; ++r) 
    { 
     for (int c = 0; c < 3; ++c) 
      printf("%f ", matrix[(r * 3) + c]); 
     printf("\n"); 
    } 
} 

float M[4][3] = { 
    0, 0, 0, 
    0, 1, 1, 
    1, 0, 1, 
    1, 1, 0 
}; 

int main() 
{ 
    float *p = &M[0][0]; 
    foo(&p); 
} 

但是這個代碼是醜陋且容易出錯,如果可能的話遵循Luchian建議和糾正的聲明。