2 array dimensionali in C ++

0

Ho iniziato a imparare matrici in C ++ e ho trovato una piccola nota a margine nel libro parlando di array 2D in breif.

L'ho testato e sono rimasto sbalordito dal fatto che potesse dare al programmatore la possibilità di memorizzare dati o informazioni e metterlo di fronte a lui in un formato a foglio di calcolo.

In un array normale per accedere agli elementi, farei semplicemente questo:

int matrix[2] = { 1, 15};

Ma in array 2D: l'unico modo in cui mi dice di accedere effettivamente agli elementi è usando un loop:

int fly[2][2];
int i = 0;
int n=0;
for(i=0; i<2; i++){
    for (n=0; n<2; n++){
        fly[i][n] =0;
    }
}
for(i=0; i<2; i++){
    for (n =0; n<2; n++){
        cout << fly[i][n]<< endl;
    }
}

Ho provato ad accedere agli elementi alla vecchia maniera:

int fly[2][2] = { 0};

ma ho notato che questo cambia tutti gli elementi a 0

..

  1. Qualcuno può spiegare quando provo ad accedere a questo array 2D come se tutti gli elementi cambiassero.

  2. C'è un altro modo per accedere agli elementi di array 2D senza usare un loop.

Grazie a tutti.

    
posta Mohamed Ahmed Nabil 22.07.2012 - 08:51
fonte

3 risposte

13

In a normal array to access elements i would simply do this:

int matrix[2] = { 1, 15};

Stai dichiarando un array con quel codice. Stai anche assegnando "1" all'int all'indice 0 e "15" all'int all'indice 1.

I have tried accessing elements the old way:

int fly[2][2] = { 0};

but i noticed that this changes all the elements to 0

Quel codice non assegna '0' all'int alle coordinate 2, 2 ... crea un array 2x2 e prova a inizializzarlo con l'array che hai fornito. Poiché l'array è più piccolo della dimensione dell'array a cui stai assegnando, il resto degli elementi è semplicemente inizializzato a 0 . Se avessi usato "{15}", avresti ottenuto un "15" nella prima posizione e "0" in qualsiasi altro posto. Prova questo:

int fly[2][2] = {{1, 2}, {3, 4}};

o anche solo:

int fly[2][2] = {1, 2, 3, 4};

In questi casi, vengono forniti valori sufficienti per ogni elemento di fly . Se tu questo, però:

int fly[2][2] = {1, 2, 3};

scoprirai che fly[1][1] è 0 perché non hai fornito dati sufficienti.

Can anyone explain when i try accessing this 2D array like this all the elements change.

Non puoi davvero dire che sono "cambiati". Stai solo creando l'array, quindi a parte l'inizializzazione non sai quali valori ci sono nell'array. In qualsiasi momento dopo aver creato l'array, è possibile accedere all'array utilizzando i due indici:

int fly[2][2] = {{1, 2}, {3, 4}};
printf("%d %d %d %d\n", fly[0][0], fly[0][1], fly[1][0], fly[1][1]);   // prints '1 2 3 4'
    
risposta data 22.07.2012 - 09:24
fonte
0

Questa è una domanda di implementazione, quindi dovrebbe essere pubblicata su StackOverflow.com , non su Programmers.StackExchange.com.

int fly[2][2] = { 0}; sta dichiarando un array (quindi perché ha int nella parte anteriore) e assegnandolo (a {0} ). Sono passati anni da quando ho fatto un C ++, ma sono un po 'sorpreso che in realtà compili (ti prendo in parola per questo), visto che stai assegnando un array monodimensionale a un array bidimensionale.

L'accesso alla matrice (e la sua uscita sullo schermo) sarebbe fatto da cout << fly[2][2] .

    
risposta data 22.07.2012 - 09:26
fonte
-1

int fly[2][2]={0} ; alloca e inizializza un nuovo array - non è un accessorio per un array esistente. Studia in C ++ Initialises e intialisation parziale.

Domanda 2: Per quanto riguarda l'analisi degli elementi dell'array, puoi usare

 cout << fly[0][0]<< endl;
 cout << fly[0][1]<< endl;
 cout << fly[1][0]<< endl;
 cout << fly[1][1]<< endl;

Questo non usa un ciclo, il quesiton è chiaro, ma probabilmente non è la domanda a cui vuoi rispondere. - quale parte dell'uso di un loop hai un problema?

    
risposta data 22.07.2012 - 09:25
fonte

Leggi altre domande sui tag