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"); }