2010-09-03 251 views
2

我公司擁有一批陣列創建二維數組的數組

double foo[][2] = { {1.0,3.0}, {2.6,10.0}, {0.0,0.0} }; 
double bar[][2] = { {1.4,3.2}, {2.1,9.9}, {2.1,9.9}, {2.1,9.9}, {0.0,0.0} }; 

因此,這些都是類型:

double (*)[2] 

我要讓這些數組,所以我需要聲明一個數組類型的指針數組的[2]

double ((*array)[2])[] = {foo, bar}; 

此語法不工作 - 這可能做到這一點在C.

我也試圖創建一個類型,但是這並沒有工作,要麼:

typedef double *mytype[2] ; 
mytype array[] = {foo, bar}; 

回答

2

正確的語法做到這一點而不typedef的是:

double (*array[])[2] = {foo, bar}; 
3

兩個數組double(*)[2]類型的不行。 foo類型爲double [3][2],酒吧類型爲double [5][2]。外部數組的大小是隱含的,而不是缺席。

要創建的這些陣列,使用它們作爲指針,從而:

typedef double (*mytype)[2]; 
mytype array[] = { foo, bar }; 
+0

外陣列尺寸可以暗示。這不是我看到它正在創建一個數組與第一個元素foo和第二個酒吧的問題。 – Callum 2010-09-03 13:29:58

+0

這兩種類型是不同的,所以你不能擁有一個擁有兩者的數組。所以隱含大小不同的事實是非常重要的。無論如何,我提交的代碼編譯並運行。 – 2010-09-03 13:35:36

+0

它確實有效。它不是純粹用於查找數組[0] [2] [0]值的指針運算。數組[0]衰變爲foo:so foo [2] [0]。 – Callum 2010-09-03 13:48:09

0
double ((*array)[2])[] = {foo, bar}; 

這不工作,因爲bar的存儲器位置相對於foo存儲器位置不是,並且foobar的類型與double (*)[2]的元素的類型不相同,其類型必須是double類型。

+0

foo和bar衰變成指針 - 問題是如何創建一個指向數組的指針數組。 – Callum 2010-09-03 13:31:39