Parcours d'une matrice en C
Fermé
clarabella 32
-
20 déc. 2009 à 01:27
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 20 déc. 2009 à 02:42
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 20 déc. 2009 à 02:42
A voir également:
- Parcours d'une matrice en C
- Mes parcours google - Guide
- Vous ne pouvez pas modifier une partie de matrice - Forum Excel
- Figer une table matrice - Forum Excel
- Plus possible de filtrer ! - Forum Excel
- Tri d'une matrice algorithme - Forum C
2 réponses
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
20 déc. 2009 à 01:44
20 déc. 2009 à 01:44
De la rigueur, de la rigueur ! Le compilateur doit se régaler ;-)
Avec ce code il n'y a pas de problème:
Avec ce code il n'y a pas de problème:
int TpsOper[3][2]; int i, j; for (i=0; i<3; i++) for (j=0; j<2; j++) { printf("t[%d,%d]= ", i+1, j+1); scanf("%d", &TpsOper[i][j]); printf("TpsOper[%d,%d] = %d\n", i+1, j+1, TpsOper[i][j]); }Bonne réflexion.
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
20 déc. 2009 à 02:42
20 déc. 2009 à 02:42
J'ajouterais pour compléter qu'en C les "tableaux" sont indexés à partir de 0. En réalité, il n'y a pas de notino de tableau en C. Quand tu écris :
.. tu alloues un bloc mémoire de 100 fois la taille en mémoire d'un entier (32 bits typiquement). Ce bloc est crée à une adresse mémoire enregistrée dans la variable tab. Cette adresse est un int * (cette écriture signifie : ce qui se trouve à cette adresse est un entier). À cette adresse se trouve le premier entier stocké dans le tableau. Ce qu'il faut bien comprendre, c'est que le fait d'écrire ...
... ou encore ...
... signifie que tu prends l'adresse de tab, comme c'est une adresse de type int *, on peut ajouter 10 ce qui revient à se décaler de 10 * 32bits en partant de tab. À cette adresse est stocké le 11ème entier du tableau. En effet, car *tab, ou encore *(tab + 0), ou encore tab[0] stocke le premier entier du tableau (cf paragraphe précédent). C'est pourquoi un "tableau" en C est indexé à partir de 0.
À noter qu'un compilateur ne peut à aucun moment deviner quel entier tu veux manipuler, et c'est pourquoi il ne dit rien quand tu écris tab[i+1].
Bonne chance
int tab[100];
.. tu alloues un bloc mémoire de 100 fois la taille en mémoire d'un entier (32 bits typiquement). Ce bloc est crée à une adresse mémoire enregistrée dans la variable tab. Cette adresse est un int * (cette écriture signifie : ce qui se trouve à cette adresse est un entier). À cette adresse se trouve le premier entier stocké dans le tableau. Ce qu'il faut bien comprendre, c'est que le fait d'écrire ...
tab[10]
... ou encore ...
*(tab+10) // cette écriture équivaut à tab[10]
... signifie que tu prends l'adresse de tab, comme c'est une adresse de type int *, on peut ajouter 10 ce qui revient à se décaler de 10 * 32bits en partant de tab. À cette adresse est stocké le 11ème entier du tableau. En effet, car *tab, ou encore *(tab + 0), ou encore tab[0] stocke le premier entier du tableau (cf paragraphe précédent). C'est pourquoi un "tableau" en C est indexé à partir de 0.
À noter qu'un compilateur ne peut à aucun moment deviner quel entier tu veux manipuler, et c'est pourquoi il ne dit rien quand tu écris tab[i+1].
Bonne chance