2010-09-03 161 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