2016-07-31 7 views
2

Ich versuche, in Struktur wie diese mehrdimensionales Array zu Array unitilized zuzuweisen:Zuweisen von mehrdimensionalen Arrays in C

typedef struct TestStruct 
{ 
    int matrix[10][10]; 

} TestStruct; 

TestStruct *Init(void) 
{ 
    TestStruct *test = malloc(sizeof(TestStruct)); 

    test->matrix = {{1, 2, 3}, {4, 5, 6}}; 

    return test; 
} 

Ich habe nächste Fehler:

test.c:14:17: error: expected expression before '{' token 
    test->matrix = {{1, 2, 3}, {4, 5, 6}}; 

Was ist die beste Art und Weise in C Matrix zuweisen?

+0

Arrays können nicht in C zugewiesen werden sie initialisiert werden kann, aber dies kann * * nur auf Definition erfolgen. – alk

Antwort

4

Sie können die Matrix auf diese Weise nicht initialisieren. In C99, können Sie diese stattdessen tun:

*test = (TestStruct){{{1, 2, 3}, {4, 5, 6}}}; 

Vor C99, würde verwenden Sie eine lokale Struktur:

TestStruct *Init(void) { 
    static TestStruct init_value = {{{1, 2, 3}, {4, 5, 6}}}; 

    TestStruct *test = malloc(sizeof(TestStruct)); 

    if (test) 
     *test = init_value; 

    return test; 
} 

Beachten Sie, dass Struktur assignent *test = init_value; zur Verwendung von memcpy(test, &init_value, sizeof(*test)); oder eine verschachtelte Schleife im wesentlichen äquivalent ist, wo Sie kopiere die einzelnen Elemente von test->matrix.

Sie können auch eine bestehende Matrix auf diese Weise klonen:

TestStruct *Clone(const TestStruct *mat) { 

    TestStruct *test = malloc(sizeof(TestStruct)); 

    if (test) 
     *test = *mat; 

    return test; 
} 
+0

Aber ich möchte Matrix in Init() -Funktion initialisieren, gibt es eine Möglichkeit, es über Zeiger zu tun? – JacobLutin

+1

@JacobLutin: die verschiedenen oben beschriebenen Methoden ** do ** initialisieren die Matrix. Was meinst du mit * gibt es eine Möglichkeit, dies über Zeiger zu tun? * – chqrlie