/* in questo file sono contenuti alcuni esempi di utilizzo dei puntatori
* e della loro aritmetica */
#include<stdio.h>
main()
{
float a[10];
char miastringa[]="Fondamenti di Informatica II";
int ii;
struct test{
int a;
float pi;
} miastruct;
/* esempi di definizione di puntatori */
float *primop,*secondop;
char *charpointer;
struct test * structpointer;
char *altrastringa="I puntatori sono PERICOLOSI!!";
for(ii=0;ii<10;ii++)
a[ii]=2*ii+1;
/* in pratica: ii a[ii]
0 1
1 3
2 5
3 7
4 9
5 11
6 13
7 15
8 17
9 19
*/
/* esempio di assegnazioni */
primop = &(a[2]);
secondop = &a[9]; /* le parentesi NON sono necessarie */
printf("*primop = %g\n",* primop); /* 5 */
printf("*secondop = %g\n",* secondop); /* 19 */
/* aritmetica dei puntatori */
printf("secondop-primop %d\n", secondop-primop); /* 7 */
printf("primop-secondo %d\n", primop-secondop); /* -7 */
/* altrettanto lecito e' sottrarre/sommare un intero da un puntatore */
printf("*(primop+2) %g\n",*(primop+2)); /* 9 */
printf("*(primop-1) %g\n",*(primop-1)); /* 3 */
/* definire un array significa definire un puntatore ad un'area di memoria
* preallocata */
printf("*a = %g\n",*a); /* 1 */
/* il fatto che un array sia equivalente ad un puntatore significa
* poter applicare ad esso l'aritmetica dei puntatori */
ii=5;
printf("*(a+ii) con ii=5 %g\n", *(a+ii)); /* 11 */
printf("a[ii] con ii=5 %g\n", a[ii]); /* 11 */
printf("ii[a] con ii=5 %g\n", ii[a]); /* 11 */
/* esempio di utilizzo dei puntatori con le strutture
* (l'esempio e' valido anche quando si parla di unioni */
miastruct.pi=3.14f;
structpointer=&miastruct; /* senza specificare i componenti */
printf("structpointer->pi %g\n",structpointer->pi); /* 3.14 */
/* i puntatori sono ampiamente utilizzati per la manipolazione
* delle stringhe ad esempio convertiamo la stringa in oggetto in
* maiuscolo */
for(charpointer=miastringa;*charpointer!=0;charpointer++)
if(*charpointer>'Z')
*charpointer-='a'-'A';
printf("%s\n", miastringa);
}