Salut,
pour revenir sur l'argument de l'intéret des pointeurs pour les grands tableaux.
Essayer ça juste pour voir :
#include <stdio.h>
#include <stdlib.h>
void fct( int t[10000] ) { int i;
printf( "sizeof %d\n", sizeof( t ) ); // affiche 4 ou 8, ça sent le pointeur
for ( i = 0; i < 4; ++i ) t[i] *= 2;
}
int main(int argc, char *argv[])
{
int t[10000] = { 1, 2, 3, 4 };
int i = 0;
for ( i = 0; i < 4; ++i ) printf( "[%d]", t[i]); printf("\n" );
fct( t );
for ( i = 0; i < 4; ++i ) printf( "[%d]", t[i]); printf("\n" );
// le tableau est modifié ce qui laisse présentir un passage par adresse ou référence)
system("PAUSE");
return 0;
}
En gros, les tableaux ne semblent (sont?) pas copiés lors des appels de fonction
mais castés automatiquement en C sans que le programmeur n'ait à le faire.
Il n'y doit y avoir aucune différent entre
void fct( int t[10000] ) { int i; for ( i = 0; i < 4; ++i ) t[i] *= 2; }
et
void fct( int* t ) { int i; for ( i = 0; i < 4; ++i ) t[i] *= 2; }
(un spécialiste en ASM pourra confirmer en regardant le code)
L'intéret des pointeurs est résumé ici : http://c-faq.com/ptrs/goodfor.html
- allocation de mémoire (tableaux)
- accès générique à des variables de même type
- (simuler) le passage par référence pour les fonctions ( le C passe tout par valeur)
- malloc'é des structures quelconque (arbres et listes liées)
- parcourir un tableau (une chaîne par exemple)
- copier efficacement les tableaux et structures par référence (particulièrement pour les paramètres de fonctions)
Remarquer le dernier point m'intrigue puisqu'il ne semble pas être valable pour les tableaux (mais au moins pour les structures).
// Ma participation à la saturation du net: http://hylvenir.free.fr