2016-03-08 56 views
0

我在這種情況下,有問題如何傳遞一個三維數組指針到c中的函數?

typedef struct { 
    ... 
} str; 

str *matrix[SIZE][SIZE][SIZE]; 

for (i = ...) { 
    for (j = ...) { 
     for (k = ...) { 
      matrix[i][j][k] = (str *)malloc(NUM * sizeof(str)); 
     } 
    } 
} 

,併成功地通過

((matrix[i][j][k])[n]) // in n-th element. 

我的問題是可以訪問此3D陣列,我怎麼能傳遞指針的這個3D陣列(以結構STR)在我的程序中的函數?

+0

也許[我的答案](http://stackoverflow.com/a/35615201/4774918)可以幫助(dup使用固定維數組)。注意我嘗試解釋N維數組的一般規則。 – Olaf

回答

0

你嘗試了明顯的語法:

訪問n個結構:

matrix[i][j][k][n].member = value; 

接收3D矩陣:

void myfunc(str *a[SIZE][SIZE][SIZE]) { 
    ... 
    a[i][j][k][n].member = value; 
    ... 
} 

注意,第一SIZE被忽略,數組衰變作爲傳遞給函數的指針,函數參數可以定義爲str *a[][SIZE][SIZE]str *(*a)[SIZE][SIZE]具有完全相同的語義。

傳遞:

myfunc(matrix); 
+0

謝謝,你的幫助很簡單,很好:) – alphonse

0

我的問題是,在我的程序中的功能如何我通過指針的這個3D陣列(以結構STR)?

該函數的參數類型需要是

str *matrix[SIZE][SIZE][SIZE] 

str *matrix[][SIZE][SIZE] 

str * (*matrix)[SIZE][SIZE] 

實施例:

#define SIZE 10 

typedef struct s str; 

void foo(str* m[SIZE][SIZE][SIZE]) 
{ 
} 

void bar(str* m[][SIZE][SIZE]) 
{ 
} 

void baz(str* (*m)[SIZE][SIZE]) 
{ 
} 

int main() 
{ 
    str* m[SIZE][SIZE][SIZE]; 
    foo(m); 
    bar(m); 
    baz(m); 
} 
+0

謝謝,你的幫助很簡單,很好:) – alphonse