[Débutant(e)]Tableau à plusieurs dimensions non dimensionné.
Selon ce code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <stdio.h>
main()
{
int i, size;
char list_ch[][2] = {'1', 'a', '2', 'b', '3', 'c', '4', 'd', '5', 'e', '6', 'f'};
size = &list_ch[5][1] - &list_ch[0][0] + 1;
size *= sizeof(char);
printf("Nombre total d'octets: %d.\n", size);
for (i=0; i<6; i++)
printf("%c %c\n",
list_ch[i][0], list_ch[i][1]);
return 0;
} |
on obtient la taille du tableau.
Pour moi il faut déjà connaître la taille du tableau (de sa première dimension) pour écrire ce code sinon pourquoi utiliser le nombre «*5*» dans la ligne
Code:
size = &list_ch[5][1] - &list_ch[0][0] + 1;
et pas un autre nombre? Comment savoir que l'adresse «*list_ch[5][1]*» existe?
Personnellement, j'aurais utilisé la fonction sizeof() avec quelque chose comme:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h>
int main(void)
{
int i, size;
char list_ch[][2] = {'1', 'a', '2', 'b', '3', 'c', '4', 'd', '5', 'e', '6', 'f'};
size = sizeof(list_ch);
printf("Nombre total d'octets: %d.\n", size);
printf("Taille de la premiere dimension: %d.\n",
size/2); /* 2 car la taille de la deuxieme dimension */
for (i=0; i<size/2; i++)
printf("%c %c\n",
list_ch[i][0], list_ch[i][1]);
return 0;
} |
Suis-je dans le vrai ou dans l'erreur?
Re: [Débutant(e)]Tableau à plusieurs dimensions non dimensio
Citation:
Envoyé par Lucky-94
Selon ce code:<...>Suis-je dans le vrai ou dans l'erreur?
Le premier code est en effet assez mauvais. Le second est meilleur. Ceci devrait lever tes derniers doutes :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
#include <stdio.h>
int main(void)
{
char list_ch[][2] = {'1', 'a', '2', 'b', '3', 'c', '4', 'd', '5', 'e', '6', 'f'};
printf("Nombre total de bytes: %u.\n", (unsigned) sizeof list_ch);
printf("Taille de la deuxieme dimension : %u.\n"
, (unsigned) sizeof *list_ch);
printf("Taille de la premiere dimension : %u.\n"
, (unsigned) (sizeof list_ch / sizeof *list_ch));
{
size_t i;
for (i = 0; i < sizeof list_ch / sizeof *list_ch; i++)
printf("%c %c\n", list_ch[i][0], list_ch[i][1]);
}
return 0;
} |
Aucune hypothèse : tout est calculé.