Controllare le proiezioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.
Introduzione al C Corso di Programmazione Grafica e Laboratorio Daniele Marini.
-
Upload
cosimo-nigro -
Category
Documents
-
view
220 -
download
2
Transcript of Introduzione al C Corso di Programmazione Grafica e Laboratorio Daniele Marini.
Introduzione al C
Corso di Programmazione Grafica e Laboratorio
Daniele Marini
Il linguaggio C
• Strutture di alto livello
• Controllo a basso livello
• Programmi efficienti
• Può essere compilato su un'ampia gamma di computer e SO
Il linguaggio C - Intro
• Programma minimo– main() {}
• Ogni programma C deve contenereuna e una sola funzione main().
Struttura di un programma C• Comandi per il preprocessore
– #define, #include, #if, #endif, etc.
• Definizione di tipi– typedef, struct, etc...
• Prototipi di funzioni (dichiarazione)– int myFunc(int a, char b, float c);
• Variabili (globali)• Funzioni (implementazione)
– int myFunc(int a, char b, float c){ // implementazione }
• Main
Esempio (parte 1)
#define MY_CONST 50 // Pre-processor
#include <stdio.h> // Pre-processor
typedef int vecInt[3]; // type definition
// function declarations
void printVec(vecInt vec);
int nPrint(vecInt vec, int times);
Esempio (parte 2)
// function implementation
void printVec(vecInt vec)
{
printf(“%d,%d,%d”,vec[0],vec[1],vec[2]);
}
Esempio (parte 3)
int nPrint(vecInt vec, int times)
{
int i; // local var
for(i=0;i<times;i++)
{
printVec(vec); printf(“\n”);
}
return i+1;
}
Esempio (parte 4)
int main(int argc, char *argv[])
{
vecInt myVect;
int res;
myVec[0] = 1; myVec[1] = 8; myVec[2] = 4;
res = nPrint (myVec, 4);
return 0;
}
Struct
• Viene allocata una stringa, un intero, un float– MiaStrutt s //s variabile di tipo MiaStrutt
• Accesso ai campi– s.c = ‘D’; s.num1 = 26; s.num2 = 77.7
typedef struct MiaStruttura { char c; int num1; float num2; } MiaStrutt;
Union
• Viene allocata un float (il più “grande” dei tre)– MiaUn u //u variabile di tipo union
• Accesso ai campi come in struct
• In vari momenti posso utilizzare una delle tre “possibilità” (devo applicare il casting)
typedef union MiaUnion { char c; int num1; float num2; } MiaUn;
Casting
• “Forzatura” del tipo di una variabileint numint;
float numfl=6.34;
char let='A';
numint=(int)numflt; //assegna il valore 6 (parte intera)
numint=(int)let;//assegna il valore 65 (codice ASCII)
Puntatori - 1
• Un puntatore è una variabile che contiene l'indirizzo di memoria di un'altra variabile puntata
int z;int *p;int val=7; //mettiamo che l’indirizzo di memoria sia 6F0p = &val; //p ha valore 6F0z = *p; //z ha valore 7
• Utilizzati per– Gestione dinamica della memoria– Passaggio di parametri per indirizzo
Puntatori - 2
6F0 7
6F1 6F0
6F2 7
Indirizzo memoria
Valore
val
z
p
int z;
int *p;
int val=7;
p = &val;
z = *p;
Puntatori - 3
• Gestione dinamica della memoria
float *misure;
void allocaMisure(int numero){
misure = (float*)malloc(numero * sizeof(float));}
…allocaMisure(15);misure[10] = 3.14;
Puntatori - 4
• Passaggio di parametri per indirizzo
void cambia(int numero){
numero = 15;}void cambiaPtr(int *numero){
*numero = 5;}
int i=10;cambia(i); // i vale sempre 10; ho passato il VALORE della varcambiaPtr(&i); // i vale 5; ho passato l’INDIRIZZO di mem
Dichiarazioni e Header Files
• Separare implementazione e dichiarazioni in diversi files
// functions.h
void printVec(vecInt vec);int nPrint(vecInt vec,
int times);
#include <functions.h>
// implementation
#include <functions.h>
// call
Link
Header File
Compilazione e Link
• Compilazione– File .c compilati in file oggetto (.obj)– In generale un file .obj per ogni file .c
• Link– “Unisce” i file .obj più eventuale codice delle
librerie
Bibliografia
• A. Kelley, I. Pohl, C Didattica e Programmazione, Addison-Wesley Italia, 1996.
• R. Sedgewick,
Algoritmi in C, Addison-Wesley Italia, 1993.
• http://alpha.science.unitn.it/~fiorella/guidac/indexc.html