2016-06-19 12 views
6

Chcę zainicjować kilka tablic, które są członami struktury, która jest przekazywana do funkcji przez odniesienie. Doceniam każdą pomoc.Jak zainicjować zmienną tablicową wewnątrz struktury?

typedef struct Snake_pos 
{ 
    char field[10][10]; 
    int Y[10]; 
    int X[10]; 

}snake_pos; 


int main() 
{ 


     snake_pos pos1; 
     pos_init(&pos1); 

    return 0; 
} 



void pos_init(snake_pos *pos1) 
{ 
    pos1->X={}; 
    pos1->Y={}; 
    pos1->field={}; 

} 

Odpowiedz

1

Można użyć składni = {} tylko przy definiowaniu zmiennej. Więc do zera każdego członka można albo zdefiniować go jako

snake_pos pos1 = { 0 }; 

Lub jeśli jest on przekazywany do funkcji, jak to

void pos_init(snake_pos *pos1) 
{ 
    memset(pos1, 0, sizeof *pos1); 
} 
+0

Obie odpowiedzi są błędne. Nie definiuje, inicjuje. Po drugie, wewnątrz funkcji robisz zbiór składający się z 0, który działa tylko wtedy, gdy użytkownik chce ustawić 0. –

+0

Pytanie @JayKumarR OP dotyczyło ** inicjalizacji **, w szczególności użycia '{}' w funkcji, która została przekazana ** określona ** zmienna. Wysłałem dwa rozwiązania. W pierwszym przypadku 'snake_pos pos1 = {0};' jest definicją ** **, która również ** inicjuje **, a dane będą łatwe do zmiany. W drugim przypadku funkcja zostanie przekazana ** zdefiniowaną ** zmienną na ** inicjalizującą **, ale ponieważ nie określił, jakie wartości ** zainicjować ** podałem trywialne rozwiązanie, które z przyjemnością zaakceptował. Jeśli możesz zamieścić lepszą odpowiedź, edytuj swoją wcześniejszą wersję i wskrzesz ją zamiast mnie. –

+0

1) Jeśli pytanie OP było o inicjalizacji, nie powinieneś wprowadzać go w błąd mówiąc "używaj składni = {} podczas definiowania". 2) PO nie powiedział, że chce, aby wszystko było "0". Tak więc zbiór jest bezużyteczny dla wszystkich typów danych oprócz wartości char i zero. 3) Jeśli chcesz tylko pomóc mu użyć sztuczki, pisz w komentarzach i podaj właściwą odpowiedź w sekcji odpowiedzi. –

1

może uzyskać dostęp do każdego elementu macierzy wewnątrz macierzy poprzez wskaźnik konstrukcji w następujący sposób:

  • do 1 D tablicy: structure_pointer->array_valiable[index1]
  • do 2 D array: structure_pointer->array_valiable[index1][index2]

więc teraz można zainicjować każdy członek tablic X, Y i field struktury snake_pos korzystających scanf() ten sposób:

#include <stdio.h> 

typedef struct Snake_pos 
{ 
    char field[10][10]; 
    int Y[10]; 
    int X[10]; 

}snake_pos; 

void pos_init(snake_pos *pos1) 
{ 
    int i,j; 

    //initializing each member 

    //of array X 
    for(i=0;i<10;i++) 
     scanf("%d",&pos1->X[i]); 

    //of array Y 
    for(i=0;i<10;i++) 
     scanf("%d",&pos1->Y[i]); 

    //of the two dimensional array field 
    for(i=0;i<10;i++) 
     for(j=0;j<10;j++) 
      scanf(" %c",&pos1->field[i][j]); 
    //notice the space before %c is to consume white spaces returning from before scanf's 
} 


int main() 
{ 


     snake_pos pos1; 
     pos_init(&pos1); 

    return 0; 
} 

Uwaga: jeśli chcesz zainicjować wszystkich członków do pojedynczej stałej wartości, następnie można zamiast używać scanf() w pętli for przypisać wartość ten sposób:

for(i=0;i<10;i++) //initializes all members with a value of 0 
     pos1->X[i]=0; 
0

Jeśli chcesz zainicjować z zerem, to dlaczego nie memset strukturę?

void pos_init(snake_pos *pos1) 
{ 
    memset(pos1, 0, sizeof(snake_pos)); 
} 
Powiązane problemy