2010-10-25 24 views
0

Je n'ai pas utilisé C dans 5-6 ans, et je pense que c'est probablement une réponse évidente. Je pensais que les tableaux étaient transmis automatiquement par référence à C, donc mon code ci-dessous devrait modifier les valeurs du tableau créé dans main() dans la fonction de changement. Il change les valeurs de la variable locale dans la fonction de changement, mais cela n'est pas reflété par la suite dans la fonction principale.Passage/modification d'un tableau multidimensionnel pour fonctionner en C

Voici mon code pour mon exemple:

int main(){ 
int array[3][5]; 
int i; 
int j;\ 

printf("BEFORE (MAIN):\n"); 
for(i = 0; i < 3; i++){ 
for(j = 0; j < 5; j++){ 
    array[i][j] = 1; 
    printf("%i, ", array[i][j]); 
} 
} 
printf("\n\n"); 
change(array); 
printf("\n"); 

printf("AFTER (MAIN):\n"); 
for(i = 0; i < 3; i++){ 
for(j = 0; j < 5; j++){ 
    array[i][j] = 1; 
    printf("%i, ", array[i][j]); 
} 
} 
printf("\n"); 

return 1; 
} 

void change(int array[][5]){ 
printf("PRECHANGE (CHANGE):\n"); 
int i; 
int j; 
for(i = 0; i < 3; i++){ 
for(j = 0; j < 5; j++){ 
    printf("%i, ", array[i][j]); 
} 
} 

printf("\n\n"); 
printf("AFTER CHANGE (CHANGE):\n"); 

for(i = 0; i < 3; i++){ 
for(j = 0; j < 5; j++){ 
    array[i][j] = 0; 
    printf("%i, ", array[i][j]); 
} 
} 
printf("\n"); 
} 

La sortie est la suivante:

AVANT (MAIN): 1, 1, 1, 1, 1, 1, 1 , 1, 1, 1, 1, 1, 1, 1, 1,

PRECHANGE (CHANGE): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1, 1, 1,

APRES CHANGEMENT (CHANGE): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

APRES (MAIN): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

j'aurais pensé que ce devrait être le suivant:

AVANT (MAIN): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

PRECHANGE (CHANGE): 1, 1, 1 , 1, 1 , 1, 1, 1, 1, 1, 1, 1,

APRES CHANGEMENT (CHANGE): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

APRÈS (MAIN): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

Répondre

3

Si vous définissez la valeur à 1

printf("AFTER (MAIN):\n"); 
for(i = 0; i < 3; i++){ 
for(j = 0; j < 5; j++){ 
    array[i][j] = 1;     /* set to 1 and print afterwards */ 
    printf("%i, ", array[i][j]); 
} 
} 

pourquoi pensez-vous que 0 à imprimer?

+0

Bon point! FFS! Maintenant, pour l'essayer sur mon vrai programme et voir pourquoi cela ne fonctionnait pas. – shazbox