在结构C中初始化变量矩阵

时间:2014-10-11 23:00:04

标签: c struct

我有这个结构:

typedef struct { int mat[x][x]; int res; } graphe;
graphe g;

我无法访问图表矩阵的问题

例如我设置时:

int m[5][5]={{0,1,1,1,0},{1,0,1,1,0},{1,1,0,1,1},{1,1,1,0,1},{0,0,1,1,0}};
graphe g = { m[5][5], 5};

for(i=0;i<lignes;i++)
    {
        for(j=0;j<lignes;j++)
        {
            printf("%i ",g.mat[i][j]);
        }
        printf("\n");
    }
printf("Res = %i ",g.res);

我有

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Res =0

通常应该是:

0 1 1 1 0
1 0 1 1 0
1 1 0 1 1
1 1 1 0 1
0 0 1 1 0
Res =5

你能帮助我吗?

2 个答案:

答案 0 :(得分:0)

graphe.mat在结构内部是25(可能,在这种情况下必须至少为25)字节的保留内存。但m是指向另一个内存位置的指针。 C和C ++都不允许将m分配给结构的成员。

如果必须将数据复制到结构中,则必须使用memcpy和朋友。如果要复制字符串,您还需要处理'\0'终止符。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct { int mat[5][5]; int res; } graphe;

int main(void) {
int m[5][5]={{0,1,1,1,0},{1,0,1,1,0},{1,1,0,1,1},{1,1,1,0,1},{0,0,1,1,0}};
graphe g;
memcpy( g.mat, m, sizeof(m));

example

答案 1 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct { int mat[5][5]; int res; } graphe;

int main(void) {
int m[5][5]={{0,1,1,1,0},{1,0,1,1,0},{1,1,0,1,1},{1,1,1,0,1},{0,0,1,1,0}};
graphe g;
memcpy( g.mat, m, sizeof(m));
g.res= 5;
for(i=0;i<lignes;i++)
    {
        for(j=0;j<lignes;j++)
        {
            printf("%i ",g.mat[i][j]);
        }
        printf("\n");
    }
printf("Res = %i ",g.res);

使用数组2D时要小心,不要像简单变量(如g.res)这样简单的做法,因为你必须指出数组的大小,所以你必须使用memcpy。