2016-06-19 37 views
6

Desidero inizializzare un paio di matrici che sono membri di una struttura che viene passata a una funzione per riferimento. Apprezzare qualsiasi aiuto.Come inizializzare una variabile di matrice all'interno di una struttura?

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={}; 

} 

risposta

1

È possibile utilizzare solo la sintassi = {} quando si definisce la variabile. Così a zero ogni membro è possibile definirla come

snake_pos pos1 = { 0 }; 

o se è passato a una funzione, come questo

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

Entrambe le risposte sono sbagliate. Non sta definendo, sta inizializzando. In secondo luogo, all'interno della funzione si sta facendo memset di 0, che funzionerà solo se l'utente vuole impostare 0. –

+0

@JayKumarR La domanda dell'OP riguardava ** l'inizializzazione **, in particolare l'uso di '{}' in una funzione che è stata passata una variabile ** definita **. Ho pubblicato due soluzioni. Nel primo caso 'snake_pos pos1 = {0};' è una ** definizione ** che ** inizializza ** e che i dati potrebbero essere facilmente modificati. Nel secondo caso, la funzione passerebbe una variabile ** definita ** a ** inizializza **, ma dal momento che non ha indicato quali valori di ** inizializzare ** ho dato la soluzione banale, che era felice di accettare. Se riesci a pubblicare una risposta migliore, ti preghiamo di modificare quella precedente e di ripristinarla invece di ridurmi al minimo. –

+0

1) Se la domanda di OP riguardava l'inizializzazione, non dovresti ingannarlo dicendo "usa la sintassi = {} quando definisci". 2) L'OP non ha detto che voleva che tutto fosse '0'. Quindi il memset è inutile per tutti i tipi di dati ad eccezione di char e valori zero. 3) Se vuoi semplicemente aiutarlo a usare un trucco, scrivi i commenti e dai una risposta adeguata nella sezione di risposta. –

1

È possibile accedere a qualsiasi elemento array all'interno di un array tramite un puntatore struttura questo modo:

  • per 1 D matrice: structure_pointer->array_valiable[index1]
  • per 2 D array: structure_pointer->array_valiable[index1][index2]

così ora, è possibile inizializzare ogni membro di array X, Y e field della struttura snake_pos utilizzando scanf() questo modo:

#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; 
} 

Nota: se desidera inizializzare tutti i membri su un singolo valore fisso, allora si può invece di utilizzare scanf() nel ciclo for, assegnare il valore in questo modo:

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

Se si desidera inizializzare con zeri, perché non memset la struttura?

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