La dichiarazione generica di una variabile X di tipo array è come segue:
X: array [ IND1, ..., INDk] of TYPE
La metafora variabile = scatola si estende a questo caso
considerando
scatole con scomparti,
es. le cassette della posta o quelle dei tipografi.
Ogni linguaggio provvede poi dei costrutti per dichiarare variabili di
questi tipi
e per esaminare e modificare gli
elementi di tali variabili.
In genere i linguaggi forniscono anche un modo per rappresentare costanti di tipo array, per esempio elencando in ordine i loro elementi usando opportuni separatori.
In C la sintassi per la selezione di una componente è
X[i1][ ...][ ik];
Il seguente programma presenta alcuni semplici usi di questi costrutti.
#include <stdio.h>
main(){
int I;
int M[3][3]; /*matrice quadrata di interi 3 X 3*/
float V[100], W[100]; /*vettori di reali di lunghezza 100*/
/*inizializzazioni*/
for(I=0; I< 2; I=I+1){
M[I][0]=1;
M[I][1]=2;
M[I][2]=3;}
for(I=0; I< 100; I=I+1)
V[I]=0.0;
/* ricordare che gli indici partono da 0, non da 1 */
/* W = V; non e' permessa occorre fare*/
for(I=0; I< 100; I=I+1)
W[I]=V[I];
W[33] = 3;
W[55] = 5;
printf("il valore di M[1][1] e\': %d\n",M[1][1]);
printf("i valori di W sono:\n");
for(I=0; I< 100; I=I+1)
printf("%f ",W[I]);
printf("\n");
}
#include <stdio.h>
/*prodotto scalare per vettori*/
main(){
int s, /*lo scalare*/ i, x;
float v[5]; /*il vettore di lunghezza 5*/
/*leggere lo scalare*/
printf("dare lo scalare\n");
scanf("%d",&s);
/*leggere il vettore*/
printf("dare il vettore\n");
for(i=0; i<= 4; i=i+1){
scanf("%d",&x); v[i]=x;};
/*l'uso di s sara' chiarito in seguito assieme a quello di &*/
for(i=0; i<= 4; i=i+1)
v[i]= v[i] * s;
/*stampare il vettore*/
for(i=0; i<= 4; i=i+1)
printf("%f ",v[i]);
printf("\n");
}
#include <stdio.h>
/*somma di matrici*/
main(){
int a[3][3], b[3][3], res[3][3], i, j, s;
/*leggere le matrici*/
printf("dare la prima matrice\n");
for(i=0; i<= 2; i=i+1)
for(j=0; j<= 2; j=j+1){
scanf("%d",&s);
a[i][j] = s;
};
printf("dare la seconda matrice\n");
for(i=0; i<= 2; i=i+1)
for(j=0; j<= 2; j=j+1){
scanf("%d",&s);
b[i][j] = s;
};
for(i=0; i<= 2; i=i+1)
for(j=0; j<= 2; j=j+1)
res[i][j] = a[i][j] + b[i][j];
/*stampare il risultato*/
for(i=0; i<= 2; i=i+1){
for(j=0; j<= 2; j=j+1)
printf("%d ",res[i][j]);
printf("\n");
}
}
Precisamente le stringhe sono array di caratteri dove la fine della stringa è segnalata dal carattere nullo ('\0'), cioè quello con codice 0.
Inoltre il C provvede un modo per rappresentare i valori di tipo stringa,
scrivendo gli elementi della stringa racchiusi tra doppi apici (come per i
parametri della funzione printf.
Tali costanti si possono utilizzare per inizializzare variabili di tipo
'stringa'.
Per esempio,
char st[] = "casa";
corrisponde alla seguente dichiarazione solita di array con
inizializzazione
char st[5] = { 'c', 'a', 's', 'a', '\0'};
#include <stdio.h>
void PrintString(char s[] /*valore*/)
{
int i;
printf("\"");
for(i=0; s[i] != '\0'; i++)
printf("%c",s[i]);
printf("\"");
}
void ReadString(char s[] /*variabile*/)
/* la stringa termina quando si va a capo */
{
char c;
int i;
scanf("%c",&c);
for( i=0; c != '\n'; i++)
{s[i]=c; scanf("%c",&c);}
s[i]='\0';
}
main(){
char string1[100], string2[] = "la casa";
ReadString(string1);
PrintString(string1);
printf("\n");
PrintString(string2);
printf("\n");
}