C/Matrices: Diferenzas entre revisións
Contido eliminado Contido engadido
Sen resumo de edición |
Revisado. |
||
Liña 1:
{{Navegador|
{| align="right" style="margin-left: 1em;"
Unha matriz (''array'' en inglés) consiste nunha serie de datos ─todos do mesmo [[{{BASEPAGENAME}}/Tipos de datos fundamentais|tipo]]─ almacenados de forma contigua en memoria interna.▼
| __TOC__
|} <!-- Isto sitúa o índice á dereita -->
▲Unha matriz (''array'' en inglés) consiste nunha serie de datos ─todos do mesmo [[{{BASEPAGENAME}}/Tipos
==Declaración==
Ao
==Elementos==
As matrices estás compostas por:
*'''
*'''Extensión'''.
*'''Índice'''. Exprésase coma un enteiro ─variable, constante ou expresión de tipo enteiro─ e utilízase para facer referencia a cada unha das celas da matriz.
*'''Dimensións'''. As matrices poden ter unha ou varias dimensións, e segundo o caso o traballo con elas pode variar bastante. A cantidade de dimensións é ilimitada, e establécese sufixando o nome da variable ao declarala con corchetes, unha parella (<code>[]</code>) por cada dimensión, dentro dos cales irá a extensión da dimensión.
Liña 23 ⟶ 27:
Onde:
:<code>tipo</code> é un
:<code>identificador</code> é o
:<code>extensión</code> é un número enteiro positivo, a cantidade de celas do tipo
Un exemplo de uso podería ser o seguinte:
Liña 31 ⟶ 35:
int notas[6];
</source>
Existen certos casos en que se pode omitir a extensión da matriz unidimensional:
Liña 38 ⟶ 40:
*se se declara coma un parámetro formal nunha función.
O tamaño que ocupe en memoria a matriz enteira dependerá do produto do tamaño en bytes do <code>tipo</code> pola <code>extensión</code>. No exemplo
===''Inicializar'' matrices unidimensionais===
<source lang=c>
unsigned short int matriz[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
</source>
O tamaño desta matriz, en celas, sería de 16. En caso de que se queira calcular este valor (o da cantidade de celas) nalgunha parte do programa, poderase deducir dun cálculo sinxelo: dividir o tamaño total da matriz polo tamaño dunha das súas celas. Sirva o seguinte exemplo ─baseado no anterior─ para ilustralo:
<source lang=c>
celas = sizeof(matriz)/sizeof(unsigned short int);
Liña 65 ⟶ 64:
<source lang=c>
notas[0] // Primeira cela
notas[
</source>
Cada cela será coma unha variable do tipo de dato da matriz. Pero cómpre ter en conta que ao contrario que a <code>extensión</code>, o <code>índice</code>
Ao pasarlle a unha [[{{BASEPAGENAME}}/Funcións|función]] unha matriz unidimensional, hai dous datos que
Nótese que pasarlle unha matriz a unha función equivale a un [[{{BASEPAGENAME}}/Funcións#Paso por valor e paso por referencia|paso por referencia]] dende
Para enviarlle a unha función o enderezo dunha matriz, faise prefixando o identificador da matriz co
<source lang=c>
</source>
Para simplificar as cousas, cómpre ter en conta algo que non se comentou ata agora: o identificador dunha variable equivale ao enderezo na memoria da súa primeira cela. É dicir, o exemplo anterior tería o mesmo efecto que o seguinte:
<source lang=c>
</source>
E na cabeceira da [[{{BASEPAGENAME}}/Funcións#Definición dunha funcións|definición da función]] declárase o enderezo de memoria da matriz recibido
<source lang=c>
función(*matriz,extensión){
// [...]▼
▲ ...
}
</source>
Ás veces pode resultar útil mandarlle a unha función unha matriz mentíndolle sobre onde comeza. É dicir, mandarlle a unha función unha matriz especificando dende que parte ten que lela. Para iso,
<source lang=c>
</source>
==Matrices
As celas das matrices poden repartirse en distintas dimensións para facilitar a visualización dos datos que contén ou o traballo con elas. En realidade, as celas dunha matriz en varias dimensións gárdanse en memoria do mesmo xeito que as matrices unidimensionais. De feito, pódese traballar cunha matriz de varias dimensións coma se en realidade tivese unha única dimensión.
Cómpre ter en conta que ao pasarlle unha matriz de varias dimensións a unha función
:<code>extensión da segunda dimensión * lugar da cela na primeira dimensión + lugar da cela na segunda dimensión</code>
Liña 129 ⟶ 127:
A extensión das dimensións adicionais (a partires da primeira) non pode fornecérselle á función de forma dinámica. É unha constante literal, e simplemente teremos que asegurarnos de que o seu valor é grande abondo para as distintas matrices que se lle podan fornecer á función, pois á hora da verdade os límites veñen establecidos por variables fornecidas á función, no exemplo anterior: <code>filas</code> e <code>columnas</code>, que serían a extensión real das dimensións primeira e segunda da matriz, respectivamente.
As extensións que necesariamente temos que especificar ao definir a función (as das dimensións adicionais), que abonda con que sexan superiores ás reais de cada caso, podemos controlalas mediante [[{{BASEPAGENAME}}/
De todos xeitos, salvo que vaiamos utilizar unha función só con matrices das que coñecemos a extensión de cada unha das súas dimensións, o mellor será que se traballe coa matriz de varias dimensións coma se en realidade fose unha matriz dunha soa dimensión, pois isto posibilitará que unha mesma función poida traballar con funcións con dimensións de extensión moi variable.
En caso de que vaiamos traballar
da verdadeira extensión das dimensións da matriz. E o que hai que facer é, a maiores, conseguir que a función ignore as celas que non interesen.
▲{{Navegador|Punteiros|Cadeas de caracteres}}
<!-- Categorías: -->
[[Categoría:C ─
|