ampholyte a écrit:Essaye de lire un cours (sur le site du zero par exemple) pour apprendre tout cela car c'est délicat d'expliquer en profondeur et leur utilisation les pointeurs ici.
#include
#include
void traitementTab(int tab[][2], int size);
int main(void) {
int tab[100][2] = {{0}};
int j = 0;
int i = 0;
traitementTab(tab, 100);
for (j = 0; j < 2; j++) {
for (i = 0; i < 100; i++) {
printf("%d\n", tab[i][j]);
}
}
return(0);
}
void traitementTab(int tab[][2], int size) {
int i = 0;
int j = 0;
for (j = 0; j < 2; j++) {
for (i = 0; i < size; i++) {
tab[i][j] = 2;
}
}
}
int * ma_fonction(int size) {
int *tab = NULL;
int i = 0;
tab = calloc(size, sizeof(int));
if (tab == NULL) {
return NULL;
}
for (i = 0; i < size; i++) {
tab[i] = i;
}
return tab;
}
int main(void) {
int *test = NULL;
test = ma_fonction(100);
free(test);
test = NULL;
}
void fonction (int Tab[], int N);
int main()
{
int Tab[N]={0} /* N constante définit au préalable*/
fonction(Tab[],N);
return 0;
}
void fonction (int Tab[], int N)
{
/*traitement*/
}Dlzlogic a écrit:@ Rockleader,
Je te conseille vraiment d'étudier un cours, quel qu'il soit.
L'intuition, la logique les déductions ne sont pas utilisables dans ce contexte.
Il y a plusieurs façon de traiter les tableaux, si tu te bloque sur une méthode, c'est à dire une syntaxe, tu vas passer à côté du reste.
Pour l'histoire du return, void ou pas, il faut bien comprendre que une fonction peut retourner une valeur (ou d'autres choses), ou rien, dans ce cas, on utilise void.
Il n'est pas correct et même pas possible de retourner un tableau. Par contre, on peut retourner un pointeur sur ce tableau. C'est le cas général de l'utilisation des chaines.
L'avantage d'un cours, quel qu'il soit, c'est que l'approche est progressive et donc pédagogique. Il faut, je pense, une certaine expérience en informatique pour apprendre le C en autodidacte. Et sans un cours, ça me parait vraiment difficile.
ampholyte a écrit:Voici les chapitres les plus importants pour ce que tu cherches à faire :
* http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-c/a-l-assaut-des-pointeurs
* http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-c/les-tableaux-2
* http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-c/l-allocation-dynamique (très peu complet)
Une fois que tu as bien compris ces 3 choses, regarde ceux-ci qui sont un peu plus complet :
* http://fr.openclassrooms.com/informatique/cours/allocation-dynamique-en-c-complement
* http://fr.openclassrooms.com/informatique/cours/la-verite-sur-les-tableaux-et-pointeurs-en-c
* http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-c/l-allocation-dynamique
Ce sont des notions assez compliquées, pour bien comprendre il n'y a qu'une seule solution => testé, testé et testé.
Fais-toi des schémas.
Voici une autre source que je préfère : http://chgi.developpez.com/pointeur/
N'essaye pas d'aller vite. Si tu n'as pas compris, relis relis et relis et posent des questions.
Rockleader a écrit:J'ai lu et compris le premier lien, du moins je pense.
Pour le second, j'en suis arrivé aux exercices de la page suivante: http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-c/passage-de-tableaux-a-une-fonction
Malheureusement il n'y a pas de corrigé sur ces petits exo, au cas échéant pourrais je vous présenter du code là dessus ?
Rockleader a écrit:Ce que j'ai compris pour le moment:
&var se lira adresse de la variable var
*var sera une variable spéciale qui va pointer sur une adresse de variable.
Rockleader a écrit:Donc si on fait *&var ça reviendrait à écrire var simplement si j'ai bien compris. cela revient à pointer l'adresse de la variable var.
Rockleader a écrit:Je regrette tout de même que le tuto ne montre pas comment faire un return d'un tableau étant donné que cest tout de même assez complexe à comprendre.
Cela dit cest peut être parce que je ne suis pas encore allé assez loin.
Rockleader a écrit:Donc pour résumé je pense avoir compris (je ne dirais pas encore maîtrisé) le passage en paramètre et sortie de pointeurs en soit; mais pas encore lorsqu'il s'agit de tableau.
int tab[10] = {0};fprintf(stdout, "%d\n", tab[0]);
fprintf(stdout, "%d\n", *tab);
fprintf(stdout, "%d\n", tab[1]);
fprintf(stdout, "%d\n", *(tab + 1)); /* C'est à dire affiche la valeur qui se trouve à la case pointée par tab + 1 */
Rockleader a écrit:Merci pour les liens soit dit en passant; je met la priorité là dessus pour apprendre étant donné mes cours sur le sujet...
Rockleader a écrit:En parlant de cela; pourriez vous me répondre en toute honnêteté; les notions de vérification de code lié au pfp; est ce réellement utile ? Concrètement lorsque vous allez écrire un programme; est ce que vous allez systématiquement réaliser des test avec prédicat d'entrée de sorties et pfp de l'action...cela me parait tout de même surréaliste; je comprends l'utilité de la chose afin de pouvoir éventuellement trouver le problème dans un programme qui plante; mais au final c'est un peu le boulot du compilateur ça non ?
Qu'appelles-tu le pfp ?
Nous introduisons dans ce qui suit une méthode de vérification fondée sur
la spécification en triplet et qui consiste à vérifier un programme spécifié
par
/*Pré condition*/
action(E, s)
/*Postcondition*/
En vérifiant limplication suivante :
Préconditionpfp( action(E, s), Postcondition)
avec
pfp( action(E, s), Postcondition), qui signifie la plus faible
précondition dans laquelle action sexécute et satisfait Postcondition.
Je suis d'accord sauf qu'on utilise jamais cette notation, vu que c'est inutile =).
Le plus important c'est pas tellement le pfp ou les tests, c'est de te sensibiliser à l'importance d'un code fiable, et à ouvrir ton esprit sur les moyens que tu peux utiliser pour t'assurer du bon fonctionnement de ton code.
Rockleader a écrit:Pour ma part pour m'assurer qu'un code fonctionne j'aurais plutôt tendance à faire des traces en affichant un peu tout ce qui pourrait bloquer.
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :