2015-11-05 19 views
5

seguito frammento di codice:Riferimento che non fa riferimento ovunque?

int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; 
int(&row)[4] = ia[1]; 

enter image description here

non riesco a ottenere la mia testa intorno perché questo particolare codice è valido. Per la mia comprensione attuale non ho una spiegazione razionale. Qualcuno può aiutarmi con quello? Il mio problema è con &row che non sembra fare riferimento ovunque. La mia unica spiegazione è che questo deve essere valido perché è un'inizializzazione.

Ho la seguente spiegazione dal mio libro:

.... definiamo fila come un riferimento ad un array di quattro interi

Quale array? Quello che stiamo per inizializzare?

risposta

13
int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; 

È una matrice di 3 elementi, ogni elemento è un array di 4 pollici.

int(&row)[4] = ia[1]; 

Qui la parte int(&row)[4] dichiara una chiamata riga di riferimento che può fare riferimento un array di 4 int. lo = ia[1] lo inizializza per fare riferimento al secondo elemento nell'array ia, che è un array di 4 pollici.

+0

"Qui la parte int (& row) [4] dichiara una riga denominata di riferimento che può fare riferimento a un array di 4 pollici." - Questo significa che può solo ma non è così? O indica l'array che si sta inizializzando? – HansMusterWhatElse

+1

@KingJulian Può e lo deve, lo si inizializza (la parte '= ia [1]' per fare riferimento (o puntare a se si desidera, ma la dicitura "punta a" verrebbe normalmente utilizzata con un puntatore, non un riferimento) un array di 4 pollici. Forse è necessario leggere ad es. [Questo] (http://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-and-a-reference-variable-in). – nos

6
int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; 

ia è un array di 3 array di 4 int ciascuna.

ia[0] è { 0, 1, 2, 3 }.

ia[1] è { 4, 5, 6, 7 }.

ia[2] è { 8, 9, 10, 11 }.

Non capisco perché dici che saremmo "in procinto di inizializzarlo" - a questo punto, ia è completamente inizializzato.

int(&row)[4] = ia[1]; 

Spiral rule (iniziamo con l'identificatore ...):

row

... è un ...

(&row)

... di riferimento ..

(&row)[4]

... ad un array di quattro ...

int(&row)[4]

... int ...

= ia[1];

... inizializzato ia[1] (perché si deve per inizializzare un riferimento, niente da fare).

Quindi row è ora un riferimento a ia[1], che è di tipo "matrice di quattro int". Questo è tutto ciò che c'è da fare.

0

(riga &) [4] significa che può fare riferimento a una matrice di 4 elementi e ia [1] è una riga dall'array 2d ia [] [] che contiene 4 elementi, quindi funziona correttamente.

Problemi correlati