2012-09-27 58 views
0

我试图总结我的头约2维数组的概念(结构)的用C结构体和多维数组

说我有如下定义:

typedef struct group group; 

struct group { 
    int members; 
    int neighbours; 
    char color; 
}; 

#define NUM_CELLS 10 

随着以下是应该一些数据从一个单一的阵列复制到一个多维数组函数:

void test_mgroup_arr(group clusters[][NUM_CELLS],group tests[NUM_CELLS], int num_groups) { 

    int i; 
    int j = 0; 

    for (i = 0; i < num_groups; ++i) 
     clusters[i][j] = tests[i]; 
} 

这被称为等:

int num_groups = 5; 
group clusters[NUM_CELLS][NUM_CELLS]; 

group tests[NUM_CELLS]; 
tests[0].members = 101; 
tests[0].neighbours = 111; 

tests[1].members = 102; 
tests[1].neighbours = 112; 

tests[2].members = 103; 
tests[2].neighbours = 113; 

tests[3].members = 104; 
tests[3].neighbours = 114; 

tests[4] = tests[3]; 

test_mgroup_arr(clusters, tests, num_groups); 

我期望函数中的代码将5个项目从测试数组复制到多维数组中的正确位置。但是,这并不像预期的那样工作,甚至在某些情况下会出现段错误。

这是怎么回事?将结构从1dim数组复制到2个dim数组的正确方法是什么?

+0

我看不出有问题(与seg故障有关)。有没有其他代码可以省略? – hmjd

+0

@hmjd segfaults(集群[i] [j] = test [i]行)的完整代码https://gist.github.com/3793595 –

+0

'我期望函数中的代码复制5个项目从测试阵列到多维数组中的正确位置。“定义”正确的位置“。如果你想测试[n] ==集群[n] [0],那么你做对了。如果你想测试[n] ==集群[0] [n]那么你的'test_mgroup_arr()'是倒退 – Mike

回答

1

我没有看到一个关于如何传递数组或访问它的问题。该代码实际上看起来不错,并给我正确的结果。注:

for(i = 0; i < num_groups, ++i) 
    clusters[i][j] = tests[i]; 

让说的地址:

clusters[0][0] is 0x0047F7EC 
clusters[1][0] is 0x0047F864 
clusters[2][0] is 0x0047F8DC 

sizeof(group) = 0xC * 0xA (num of groups) = 0x78 

所以,你可以看到数学的作品在这里。 j总是== 0,那么我在做什么? 集群+我的地址是:

0x0047F7EC for i=0 
0x0047F864 for i=1 
0x0047F8DC for i=2 

你所期望的究竟是什么。当我离开test_mygroup_arr时,我得到了簇[0] [0],簇[1] [0],簇[2] [0],簇[3] [0],簇[4] [0]的值是分别设置为测试[0],测试[1],测试[2],测试[3],测试[4]中的值。

这就是你要纠正的问题吗?

您是否尝试打印地址以查看发生了什么?你的代码还有更多,你没有显示?我想知道如果别的东西是你的seg故障的原因。 我假设你使用的是C99编译器?

注意:我对你的代码工作正常的测试只是和你发布的一样。

int main() 
{ 
    int num_groups = 5; 
    ... 
    test_mgroup_arr(clusters, tests, num_groups); 
    return 0; 
} 
0

实际上传递数组作为参数,你必须通过它`第一个元素的指针,这是编译器如何期望它,所以不是

void test_mgroup_arr(group clusters[][NUM_CELLS],group tests[NUM_CELLS], int num_groups) 使用

void test_mgroup_arr(group (*)[NUM_CELLS],group tests[NUM_CELLS], int num_groups) 
+0

指针现在没有名称(簇)。我不知道如何把名字放在那里。 –

+0

组(*指针)[NUM_CELLS] –

+0

你的语法错误,请用OP的名字: '无效test_mgroup_arr(集团(*集群)NUM_CELLS],组测试[NUM_CELLS],诠释NUM_GROUPS)' 同样这并未”无论如何,两者都是通过阵列的等效方式。 – Mike