Nel codice:
m[1] - m[0]
denota un puntatore sottrazione che vi dà la differenza dei due puntatori in base al tipo di . In questo caso, entrambi i puntatori sono differenziati da 3 elementi, quindi il risultato è 3.
citare C11
standard capitolo §6.5.6
Quando due puntatori vengono sottratti, entrambi devono indicare elementi dello stesso oggetto matrice, o uno dopo l'ultimo elemento dell'oggetto matrice; il risultato è la differenza degli indici dei due elementi dell'array. [...]
e
[...] In altre parole, se le espressioni P
e Q
punto a, rispettivamente, i i
-esimo e j
elementi -esimo un oggetto array, l'espressione (P)-(Q)
ha il valore i−j
a condizione che il valore si adatti a un oggetto di tipo ptrdiff_t
. [....]
per aiutare a visualizzare meglio, vedere il seguente immagine
Qui, s
è una matrice bidimensionale, definito come s[4][2]
. Considerando il tipo di dati dell'array consumer 2 byte ciascuno, si prega di seguire gli elementi (indice) e la posizione di memoria corrispondente (arbitrario). Ciò consentirà di capire meglio come effettivamente nella memoria gli elementi dell'array siano contigui.
Così, secondo la rappresentazione, s[0]
e s[1]
si differenziano da due elementi, s[0][0]
e s[0][1]
. Quindi, s[1] - s[0]
produrrà un risultato di 2.
fonte
2016-03-07 12:56:18
'm [1]' è '& m [1] [0]' e così via. – immibis
Tecnicamente, 'm' non è una matrice 3x3 ma una matrice di matrici. – HelloGoodbye
Nessuna risposta menzionata ancora, ma 'm [0]' e 'm [1]' sono * matrici * (non puntatori). Un valore di puntatore viene prodotto quando l'array viene usato come operando dell'operatore '-', che punta al primo elemento della rispettiva matrice. –