![Page 1: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/1.jpg)
Breve Riepilogo del Linguaggio C
![Page 2: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/2.jpg)
2
Note
● Gli script shell cominciano “sempre” con la seguente riga:
#!/bin/sh
● NON esistono spazi all'interno della stringa “#!/bin/sh”
● NON ci sono altri caratteri (oltre il newline) sulla prima riga
![Page 3: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/3.jpg)
3
Linguaggio C
● I sorgenti devono essere creati utilizzando un editor di testo (vi/emacs...)– Non utilizzare word processor!
● Per gcc, il suffisso del nome del file identifica la/le operazione/i che il compilatore esegue:– <file>.c: Codice sorgente C che deve essere
preprocessato● <file>.C (maiuscola): Codice sorgente C++.
– <file>.h: Header file che non deve essere ne' compilato ne' utilizzato per l'operazione di link
![Page 4: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/4.jpg)
4
Contenuto dei file
● I file “.c” contegono:– direttive per il pre-processore– codice sorgente
● I file “.h” possono contenere:– direttive per il pre-processore– dichiarazioni di funzioni– dichiarazioni di variabili, strutture
● I file “.h” NON contengono l'implementazione delle funzioni
![Page 5: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/5.jpg)
5
Modularita'
● E' opportuno distribuire le funzionalita' delle applicazioni complesse in piu' file.– Semplifica lo sviluppo, il debugging ed il riuso
del codice.
● L'accorpamento delle funzionalita' avviene durante la compilazione:– NON utilizzare direttive del tipo:
● #include “miofile.c”
![Page 6: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/6.jpg)
6
Compilazione
● Nei sistemi Linux, la compilazione di sorgenti C avviene utilizzando il comando gcc (GNU C Compiler)
● Per compilare il programma test1.c potrebbe essere sufficiente eseguire:
– gcc test1.c
– Il nome dell'eseguibile, in questo caso, e' a.out● L'opzione -Wall mostra tutti i warning
![Page 7: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/7.jpg)
7
Compilazione
● Per creare l'eseguibile, gcc attraversa varie fasi, tra cui:
– preprocessing
– compilazione
– linking● Se l'applicazione e' distribuita in piu' sorgenti, puo'
essere sufficiente eseguire il seguente comando:
– gcc -o nomefile file1.c file2.c...
– In questo caso, il nome del programma eseguibile e' nomefile
![Page 8: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/8.jpg)
8
Compilazione separata
● Normalmente, il compilatore esegue sia la compilazione che il linking
● gcc -c file1.c esegue solo la compilazione, producendo il file oggetto file1.o
● se abbiamo i file oggetto file1.o e file2.o, possiamo “linkarli” con gcc file1.o file2.o, producendo a.out
● il programma make automatizza questo processo
![Page 9: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/9.jpg)
9
Linguaggio C
● In ogni applicazione esiste sempre un'unica funzione main
– unica per l'applicazione – NON “unica in ogni file”.
● Le “firme” standard della funzione main sono:
– int main(int argc, char *argv[])● Consente di ottenere i parametri passati all'applicazione dalla linea di comando
– int main(void)
![Page 10: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/10.jpg)
10
Puntatori
#include <stdio.h>
int main(void){
int a=5;
int *p;
printf("%d",a);
p=&a;
*p=6;
printf("%d",a);
}
p=&a; (tutte le operazioni su “*p” sono operazioni su a)
p=a; ERRATO! p accetta indirizzi di interi, NON interi!
![Page 11: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/11.jpg)
11
Operatori
● Operatori relazionali:
> >= < <= == !=
● Operatori logici
&& (and) || (or) ! (not)
● Operatori di incremento e decremento:
k++ ++k k-- --k
● Operatori orientati ai bit:
& (and) ! (or) ^ (xor) << (shift a sx)
>> (shift a destra) ~ (complemento a uno)
![Page 12: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/12.jpg)
12
Funzioni e prototipi
● E' opportuno dichiarare sempre le funzioni utilizzate all'interno di ogni file.– semplifica la correzione degli errori legati ai tipi
– possibilmente tramite un file header “.h”
● La firma (o prototipo) di una funzione include: – tipo del valore restituito dalla funzione
– nome della funzione
– elenco dei parametri con rispettivi tipi
![Page 13: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/13.jpg)
13
Funzioni e prototipi
in pippo.h:
int fun(int a, float b);
...
in pippo.c:
#include “pippo.h”
int fun(int a, float b){return(a+(int)b);
}
![Page 14: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/14.jpg)
14
Esempio 1
Qual e' il comportamento del seguente codice C ?
#include <stdio.h>#include <unistd.h>
int main(void){
printf("Hello World!");sleep(5);
}
![Page 15: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/15.jpg)
15
Esempio 1
Qual e' il comportamento del seguente codice C ?
#include <stdio.h>#include <unistd.h>
int main(void){
printf("Hello World!");sleep(5);
}
Una volta in esecuzione, aspetta 5 secondi e POI stampa “Hello World!”
![Page 16: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/16.jpg)
16
Esempio 1
● Alcune funzioni di I/O standard utilizzano il buffering
– utilizzano un'area di memoria per memorizzare le informazioni prima di inviarle al device
– riduce il numero di system call “effettive” e migliora le performance
● Esistono tre tipi di buffering:
– Completo: L'I/O effettivo avviene solo al riempimento del buffer
● Non utilizzato per device interattivi come schermo e tastiera
– Buffering a linea: L'I/O viene eseguito non appena viene inserito nel buffer un carattere newline '\n' (o al termine del processo)
● Utilizzato da printf e scanf
– Senza buffering: L'I/O avviene immediatamente
● Utilizzato, ad esempio, per lo standard error
![Page 17: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/17.jpg)
17
Esempio 1
Il seguente codice si comportera', quindi, come atteso.
#include <stdio.h>#include <unistd.h>int main(void){
printf("Hello World!\n");sleep(5);
}
![Page 18: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/18.jpg)
18
Esempio 2
Qual e' l'output del seguente codice C ? #include <stdio.h>int main(void){
int x,y;x=0;y=0;while(x=y) x=x+1;printf("x=%d, y=%d\n",x,y);
}
![Page 19: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/19.jpg)
19
Esempio 2
Qual e' l'output del seguente codice C ? #include <stdio.h>int main(void){
int x,y;x=0;y=0;while(x==y) x=x+1;printf("x=%d, y=%d\n",x,y);
}Risposta: x=0, y=0
La condizione del while e' implementata utilizzando l'operatore di assegnazione “=” invece dell'operatore di confronto “==”
![Page 20: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/20.jpg)
20
Esempio 3
Qual e' l'output del seguente codice C ? #include <stdio.h>int main(void){
int x,y;x=0;for(y=0; y<99; y++);{
x = x+1;}printf("x=%d, y=%d\n", x, y);
}
![Page 21: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/21.jpg)
21
Esempio 3
Qual e' l'output del seguente codice C ? #include <stdio.h>int main(void){
int x,y;x=0;for(y=0; y<99; y++);{
x = x+1;}printf("x=%d, y=%d\n", x, y);
}
Risposta: x=1, y=99Il “;” dopo il “for” rende il corpo del ciclo “vuoto”.
![Page 22: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/22.jpg)
22
Esempio 4: scanf
Il seguente programma compilato termina con errore. Perche'?
#include <stdio.h>int main(void){
int x;printf("Inserisci un intero:");scanf("%d", x);printf("L'intero inserito è %d\n", x);
}L'errore generato sui sistemi Unix e' Segmentation Fault o, tentativo di
accesso ad un “Segmento” di memoria non allocato.Questo tipo di errore e' dovuto, in genere, all'uso improprio dei puntatori.
![Page 23: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/23.jpg)
23
Esempio 4: scanf
Il seguente programma compilato termina con errore. Perche'?
#include <stdio.h>int main(void){
int x;printf("Inserisci un intero:");scanf("%d", &x);printf("L'intero inserito è %d\n", x);
}
![Page 24: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/24.jpg)
24
Esempio 5: scanf
Qual e' il comportamento del seguente programma?
#include <stdio.h>int main(void){
int x;char stringa[31];printf("Inserisci un intero:");scanf("%d", &x);printf("Inserisci una riga di testo:");fgets(stringa, 30, stdin);
}
![Page 25: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/25.jpg)
25
Esempio 5: scanf
Qual e' il comportamento del seguente programma?
#include <stdio.h>int main(void){
int x;char stringa[31];printf("Inserisci un intero:");scanf("%d\n", &x);printf("Inserisci una riga di testo:");fgets(stringa, 30, stdin);
}Legge l'intero e termina.La funzione “scanf” legge dal buffer solo l'intero e vi lascia il “\n”.
![Page 26: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/26.jpg)
26
Esempio 6: array
Qual e' l'errore in questo codice ?
#include <stdio.h>
int main(void){
int a[10], i;for(i=1; i<=10; i++)
a[i] = i;
printf("a[%d]=%d\n", i, a[i]);}
![Page 27: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/27.jpg)
27
Esempio 6: array
Qual e' l'errore in questo codice ?
#include <stdio.h>
int main(void){
int a[10], i;for(i=0; i<=9; i++)
a[i] = i;
printf("a[%d]=%d\n", i, a[i]);}
Gli elementi in un array a con 10 elementi sono:a[0], a[1], ... a[9]
![Page 28: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/28.jpg)
28
Esempio 7
Qual e' l'errore in questo codice ?
#include <stdio.h>#include <string.h>int main(int argc, char *argv[]){
char *stringa;strcpy(stringa, argv[1]);printf("%s", stringa);return 0;
}
![Page 29: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/29.jpg)
29
Esempio 7
Qual e' l'errore in questo codice ?
#include <stdio.h>#include <string.h>int main(int argc, char *argv[]){
char stringa[30];strcpy(stringa, argv[1]);printf("%s", stringa);return 0;
}
La dichiarazione char *stringa alloca lo spazio per un puntatore ad un carattere, NON per una stringa (array) di caratteri.
Anche così, il programma non è molto corretto...
![Page 30: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/30.jpg)
30
Esempio 8#include <stdio.h>int main(void){
int x,y;void swap(int a, int b);printf("Inserisci l'intero x=");scanf("%d", &x);printf("Inserisci l'intero y=");scanf("%d", &y);swap(x,y);printf("(y,x)=(%d,%d)\n",x,y);return 0;
}void swap(int a, int b){
int temp;temp=a;a=b;b=temp;return
}
Perche' la funzione non esegue lo swap ?
![Page 31: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/31.jpg)
31
Esempio 8#include <stdio.h>int main(void){
int x,y;void swap(int *a, int *b);printf("Inserisci l'intero x=");scanf("%d", &x);printf("Inserisci l'intero y=");scanf("%d", &y);swap(&x,&y);printf("(y,x)=(%d,%d)\n",x,y);return 0;
}void swap(int *a, int *b){
int temp;temp=*a;*a=*b;*b=temp;return
}
Perche' la funzione non esegue lo swap ?
Le variabili passate per valore alla funzione swap, sebbene modificate, mantengono il loro varole
originale.
![Page 32: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/32.jpg)
32
Esempio 9: cast
#include <stdio.h>
int main(void){
float x = 3.5f;
int i = (int) x;
int *p = (int *) &x;
printf("%d %d\n", i, *p);return 0;
}
● Qual e' l'output di questo programma?
![Page 33: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/33.jpg)
33
Esempio 9: cast
#include <stdio.h>
int main(void){
float x = 3.5f;
int i = (int) x;
int *p = (int *) &x;
printf("%d %d\n", i, *p);return 0;
}
● output:
3 1080033280● il primo cast effettua il
troncamento di 3.5
● il secondo cast permette di leggere la rappresentazione binaria di 3.5 come se fosse un intero
![Page 34: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/34.jpg)
34
Dichiarazioni
int a,b,c;
float d=0.0,e,f=1.0;
char g='a';
struct{
int data;
float ratio;
char iniziale;
} struttura;
struttura.data=5;
struttura.ratio=1.0;
int array1[10];
int array2[10][10];
Costanti simboliche:
#define MINIMO 1
#define MASSIMO 5
![Page 35: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/35.jpg)
35
Istruzioni e Blocchi
● Il terminatore o delimitatore di istruzioni e' il “;”– Oppure la “,” ma con un significato specifico
● Le parentesi { } delimitano un blocco di istruzioni– E' necessario delimitare i blocchi contenenti
almeno due istruzioni – E' opzionale delimitare i blocchi contenenti
un'unica istruzione (es. “if”)
![Page 36: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/36.jpg)
36
Variabili
● Tutte le variabili devono essere dichiarate prima del loro uso
● La variabile e' visibile solo all'interno del blocco in cui e' dichiarata
● Il C fornisce i seguenti tipo di dato base:– char, int, float, double, long, short.– NON esiste il tipo “stringa”
● E' possibile costruire tipi di dato complessi tramite il costrutto struct
● E' possibile dichiarare puntatori a variabili
![Page 37: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/37.jpg)
37
Funzioni
● Il passaggio dei parametri puo' avvenire:– Per valore: eventuali modifiche all'interno
della funzione NON hanno effetto al suo esterno
● es., int fun(int a);
– Per riferimento: Eventuali modifiche all'interno della funzione hanno effetto sul valore della variabile nella funzione chiamante
● es. int fun(int *a);
![Page 38: Breve Riepilogo del Linguaggio C - wpage.unina.itwpage.unina.it/m.faella/Didattica/Labos/riepilogo-c.pdf · Linguaggio C I sorgenti devono ... – Non utilizzare word processor! Per](https://reader031.vdocuments.pub/reader031/viewer/2022022722/5c68085409d3f2c85f8ce328/html5/thumbnails/38.jpg)
38
Strutture di controllo
If (condizione){
lista istruzioni
}
else{
lista istruzioni
}
while (condizione){
lista istruzioni
}
for (expr1;expr2;expr3){
lista istruzioni
}
equivalente a:
expr1;
while (expr2){
lista istruzioni
expr3;
}