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
| void treat(int* p)
{
printf( "[%p] valeur=%d\n", p, *p );
}
void algo3()
{
int ii, nb, annul;
int** pdebut, ** pfin, ** pcur;
int entiers[] = { 10, 20, 30, 40 };
const int nb_elements = sizeof(entiers)/sizeof(entiers[0]);
int* pointeurs[nb_elements];
/* init du tableau de pointeurs */
for( ii = 0; ii < nb_elements; ++ii )
{
pointeurs[ii] = &entiers[ii];
}
/* init des bornes du tableau */
pdebut = &pointeurs[0];
pfin = &pointeurs[nb_elements];
pcur = &pointeurs[2];
annul = 1;
nb = 0;
printf("DEBUT\n");
while( nb < nb_elements )
{
if( *pcur != NULL )
{
treat( *pcur );
/* raz compteur */
nb = 0;
}
else
{
/* increment compteur de ptr NULL */
++nb;
}
/* avancer sans dépasser la borne de fin */
if( ++pcur == pfin )
{
pcur = pdebut;
/* on NULLifie les pointeurs petit à petit */
/* pour que la boucle se termine un jour */
pointeurs[annul] = NULL;
annul = (annul + 1) % nb_elements;
}
}
printf("FIN\n");
} |