Enlace: https: //zhuanlan.zhihu.com/p/23579860
Fuente: saber casi con
derechos de autor del autor. Para reimpresiones comerciales, comuníquese con el autor para obtener autorización. Para reimpresiones no comerciales, indique la fuente.
declaración:
- El contenido del artículo se recopila y compila de "C ++ Primer Chinese Edition (5th Edition)", y los derechos de autor pertenecen al libro original.
- El libro original tiene interpretaciones más detalladas y maravillosas, compre libros genuinos para aprender.
- Este artículo es solo para aprendizaje y comunicación, cualquier forma de reimpresión está prohibida.
Las matrices multidimensionales son en realidad matrices de matrices
int ia[3][4];
Leer de adentro hacia afuera: ia es una matriz con 3 elementos, y cada elemento es una matriz con 4 enteros
inicialización
int ia[3][4] = {
{
0, 1, 2, 3}, {
4, 5, 6, 7}, {
8, 9, 10, 11} };
Básicamente, no hay diferencia entre la inicialización de una matriz unidimensional, ia tiene 3 elementos, por lo que hay 3 llaves dentro de las llaves exteriores, y cada llave se usa para inicializar un elemento de ia.
Como una matriz unidimensional, también puede dar solo una parte del valor inicial
int ix[3][4] = {
{
0}, {
4}, {
8} };
int ia[3][4] = {
0, 3, 6, 9 };
Subíndice
ia [2] [3] devuelve el tercer elemento del segundo elemento (matriz) de ia
ia [1] devuelve el primer elemento de ia (matriz)
Preste atención a comprender que las matrices multidimensionales son en realidad matrices de matrices.
Rango para
Puede usar bucles for y rango para atravesar matrices multidimensionales
Al usar el alcance de, es mejor declarar las variables de control como tipos de referencia
size_t cnt = 0;
for( auto &row : ia )
{
for( auto &col : row )
{
col = cnt;
++cnt;
}
}
Si no se declara como tipo de referencia
for( auto row : ia )
for( auto col : row )
La primera línea toma cada elemento de ia, que es un tipo de matriz, que el compilador convertirá en un puntero al primer elemento, y se informará un error en la segunda línea
Por lo tanto, solo el bucle más interno no puede usar tipos de referencia
Por simplicidad, es mejor usar tipos de referencia
Punteros y matrices multidimensionales
Los nombres de las matrices de matrices multidimensionales también se convierten automáticamente en punteros.
int ia[3][4];
auto p = ia;
Proceso de comprensión:
- ia es una matriz con 3 elementos
- Cada elemento es una matriz que contiene 4 elementos.
- Por lo tanto, su primer elemento también es una matriz que contiene 4 elementos
- El puntero al primer elemento es el puntero a la matriz con 4 elementos
Equivalente a
int (*p)[4] = ia;
Recorre cada elemento
for( auto p = ia; p != ia + 3; ++p )
{
for( auto q = *p; q != *p + 4; ++ q )
{
cout << *q << ' ';
}
cout << endl;
}
Desreferencia p para obtener una matriz que contiene 4 elementos, * p es un puntero a su primer elemento
También puede utilizar las funciones de inicio y fin
for( auto p = begin(ia); p != end(ia); ++p )
{
for( auto q = begin(*p); q != end(*p); ++ q )
{
cout << *q << ' ';
}
cout << endl;
}
Use alias de tipo para simplificar la escritura
using int_array = int[4];
typedef int int_array[4];
No lo olvide, la forma de typedef es similar a la declaración de variable