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;
}
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
-
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-
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 -
-
-
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]);
} -
ContributeurPour 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
Le prototype est bon, mais visiblement, après tu ne sais pas trop ce que tu fais.
* 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]);
}
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 :-)
-