1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
// Le but de ce TD est de comprendre la diff�ence entre
// passage par valeur et par adresse.
// En plus, on exp�imente l'allocation dynamique et aussi le calcul de
// pointeurs (on ajoute �un pointeur une valeur, ce qui provoque son
// d�alage).
#include <stdio.h>
void par_valeur(int a)
{
printf("entier recu: %i\n", a);
a++;
printf("entier modifi� %i\n", a);
}
void par_adresse(int * a)
{
printf("entier recu: %i\n", *a);
(*a)++;
printf("entier modifi� %i\n", *a);
}
void affiche_n(int * tab, int n)
{
int i;
for (i=0;i<n;i++)
printf("tab[%i]=%i\n", i, tab[i]);
}
int main(int argc, char ** argv)
{
int i = 12;
int tableau[10] = {1,2,3,8,9,10,554,654,5544,744};
int * tableau_dynamique;
int j;
size_t nb_case;
int num_case;
// Exercice 1
printf("entier avant fonction par_valeur: %i\n", i);
par_valeur(i);
printf("entier apr� fonction par_valeur: %i\n", i);
// Exercice 2
printf("entier avant fonction par_adresse: %i\n", i);
par_adresse(&i);
printf("entier apr� fonction par_adresse: %i\n", i);
// Exercice 3,4,5,6
affiche_n(tableau,9);
par_valeur(tableau[5]);
affiche_n(tableau+5,3);
// Exercice 7
printf("Nombre de cases �allouer ? ");
scanf("%i", &nb_case);
tableau_dynamique = (int *)calloc(nb_case, sizeof(int));
for (j=0; j<nb_case; j++)
tableau_dynamique[j] = j;
affiche_n(tableau_dynamique, nb_case);
free(tableau_dynamique);
// Exercice 8
for (j=0; j<100000; j++)
{
// Dangereux, surtout sans free !!!
//tableau_dynamique = (int *)calloc(10000, sizeof(int));
}
// Exercice 9
printf("Quelle case afficher ? ");
scanf("%i", &num_case);
printf("Valeur de la case %i: %i\n", num_case, (*(tableau_dynamique+num_case)));
} |
Partager