Pointeurs

Bonjour,

je dois ecrire des fonctins concernant les pointeurs et j ai un peu de mal, tout d abord j ai fais deux fonctions quelqu un peut il me dire si cela est exacte ? :

--i* Écrire une fonction qui prend un pointeur sur int en paramètre et donne à l'int la
valeur de 42.

nt main(void)
{
int a;
int *ptr;

a = 42;
ptr = &a;
printf(ptr);
return (0);
}

---------------

Écrire une fonction qui prend un pointeur sur pointeur sur pointeur sur pointeur sur
pointeur sur pointeur sur pointeur sur pointeur sur pointeur sur int en paramètre
et donne à l'int la valeur de 42.

nt main (void)
{
int a;
int *ptr;
int **ptr2;
int ***ptr3;
int ****ptr4;
int *****ptr5;
int ******ptr6;
int *******ptr7;
int ********ptr8;
int *********ptr9;

a = 42;
ptr = &a;
ptr2 = &ptr;
ptr3 = &ptr2;
ptr4 = &ptr3;
ptr5 = &ptr4;
ptr6 = &ptr5;
ptr7 = &ptr6;
ptr8 = &ptr7;
ptr9 = &ptr8;
ft_putnbr(*********ptr9);
return (0);
}

-------------------- Voila apres ce aui me pose soucis c est fonction divise les deux paramètres a et b et stocke le resultat dans l'int
pointé par div.
Elle stocke également le reste de la division de a et b dans l'int pointé par mod.

J ai commence comme ca mais je bloque un peu..

int main (int a, int b, int *div, int*mod)
{
a/b = *div;
%*div = **mod;

}

2 réponses

  1. Bonjour merci pour ta reponse, pour le 1 je dois juste mettre une fonction dans le main et c est bon ?

    Pour le 2 on nous donne cela pour le "afficher"

    Et pour le 3 je n ai rien compris, je ne sais pas comment proceder, j ai essaye mais il faut croire que ce n est pas encore ca lol
    1. pour le 3 on m a expliquer plus ou moins

      int main (int a, int b, int *div, int*mod)
      {
      *div = a / b;
      *mod = a % b;
      }

      donc le a/b divise et a%b reste de la division, par contre vu que a et b et stocke le resultat dans l'int
      pointé par div j aurais plutot mis l inverse : a/b=*div, quelqu un peut m expliquer ? merci
    2. Contributeur
      https://www.commentcamarche.net/contents/112-langage-c-les-fonctions

      "une fonction qui prend un pointeur sur int en paramètre"

      cela aurait un prototype du genre :
      void nom_de_ma_fonction(int * entier)


      Fais une fonction. C'est l'exercice demandé.

      Dal
    3. D acc donc void ft_ft(int *nbr)
      {
      *nbr = 42;
      }

      ?
    4. apres pour un autre j ai teste comme ca est ce correct ?
      Écrire une fonction qui a?che un à un les caractères d'une chaîne à l'écran.
      * L'adresse du premier caractère de la chaîne est contenue dans le pointeur passé en
      paramètre à la fonction. Ou ne nous donne aucune chaine de caractere donc j ai mis unknow par defaut ?

      void ft_putstr(char *str)
      {
      char *str;
      str = "unknow";
      ft_putchar(*str[0]);
      *str = &ft_putchar(*str[1]);
      ft_putchar(*str[2]);
      ft_putchar(*str[3]);
      ft_putchar(*str[4]);

      }
    5. Contributeur
      Pour ft_ft, cela ressemble déjà plus à ce qui est demandé :-)

      Pour ft_putstr, pas trop. Voilà quelques commentaires.

      void ft_putstr(char *str)       /* c'est donc ta fonction et 
      * str est ton pointeur passé par la
      * fonction appelante */
      {
      char *str; /* tu ne peux pas redéclarer str */
      str = "unknow"; /* non, la chaîne est déjà à l'emplacement
      * mémoire pointé par le pointeur str, de
      * plus ce n'est pas comme cela que l'on
      * copie une chaîne en C (cf. strcpy dans
      * string.h) */
      ft_putchar(*str[0]); /* je ne connais pas ft_putchar */
      *str = &ft_putchar(*str[1]);
      ft_putchar(*str[2]);
      ft_putchar(*str[3]);
      ft_putchar(*str[4]);

      }
      Le prototype est bon, mais visiblement, après tu ne sais pas trop ce que tu fais.

      Voilà quelques indications pour avancer :

      - str est un pointeur vers le premier caractère d'une chaîne allouée quelque part en mémoire
      - ce n'est pas le boulot de ta fonction que d'allouer l'espace mémoire ou d'affecter la chaîne, son boulot c'est d'afficher la chaîne située à l'emplacement mémoire pointé par le pointeur (passé par main ou par une autre fonction)
      - une chaîne en C est composée d'un nombre variable de caractères et se termine par \0
      - un caractère est un char que tu peux afficher
      - comme tu ne connais pas à l'avance la longueur de la chaîne, tu dois vérifier si à l'emplacement en question ne se trouve pas \0 indiquant la fin de la chaîne
      - si ce n'est pas le cas, tu l'affiches, et tu passes à l'emplacement suivant
      - tu as, tu l'auras compris, besoin d'une boucle

      Bon courage !

      Dal

      Edit : stp, quand tu postes du code, essaye avant de le compiler avec tous les warnings (avec gcc l'option -Wall est déjà un bon début), et avant de poster, corrige toutes les erreurs de syntaxe empêchant la compilation, et comprend la raison des warnings émis par le compilateur et fais ce qu'il faut pour y remédier et faire taire tous les warnings. Si tu ne sais pas comment les corriger, vois ton cours de C, un manuel, cherche par toi même, et si tu n'y arrives pas pose la question ici :-)