Warning: incompatible pointer
Fermé
StudiioZ
Messages postés
2
Date d'inscription
mardi 15 février 2022
Statut
Membre
Dernière intervention
15 février 2022
-
Modifié le 15 févr. 2022 à 02:21
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 15 févr. 2022 à 16:12
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 15 févr. 2022 à 16:12
A voir également:
- Warning: incompatible pointer
- Warning package.json: no license field - Forum Javascript
- Quota warning free - Guide
- Warning zone telechargement - Accueil - Services en ligne
- Pcl xl error warning illegal media type - Forum Imprimante
- Téléchargement direct : les bonnes adresses des sites pirates - Accueil - Outils
3 réponses
NHenry
Messages postés
15163
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 novembre 2024
345
15 févr. 2022 à 09:47
15 févr. 2022 à 09:47
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
15 févr. 2022 à 11:00
15 févr. 2022 à 11:00
Bonjour,
Le mot
Il faut écrire:
Le mot
arrdésigne le tableau, mais il représente aussi l'adresse du premier élément de ton tableau. Donc prendre l'adresse de
arr, c'est obtenir l'adresse du tableau. Toi tu veux un pointeur sur le 1er
chardu tableau. C'est pour cela que tu verras souvent l'expression : il ne faut pas mettre l'opérateur d'adresse devant un tableau.
Il faut écrire:
arr_ptr = arr; // prendre l'adresse du premier élément
// ou
arr_ptr = &arr[0]; // prendre l'adresse du premier élément
StudiioZ
Messages postés
2
Date d'inscription
mardi 15 février 2022
Statut
Membre
Dernière intervention
15 février 2022
15 févr. 2022 à 12:58
15 févr. 2022 à 12:58
Merci pour votre réponse si rapide !
En réalité, mon objectif derrière ce code est simplement de print l'adresse du tableau. Chose que je pensais faire avec le code ci dessus. En lisant votre réponse je comprends donc que " char *arr_ptr; " pointe vers le premier caractère de mon tableau de caractère, est ce cela ? Si oui, pourquoi mon code ne fonctionne-t-il quand même pas ? J'ai beaucoup de mal à saisir comment fonctionne un tableau en mémoire...
En réalité, mon objectif derrière ce code est simplement de print l'adresse du tableau. Chose que je pensais faire avec le code ci dessus. En lisant votre réponse je comprends donc que " char *arr_ptr; " pointe vers le premier caractère de mon tableau de caractère, est ce cela ? Si oui, pourquoi mon code ne fonctionne-t-il quand même pas ? J'ai beaucoup de mal à saisir comment fonctionne un tableau en mémoire...
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
15 févr. 2022 à 16:12
15 févr. 2022 à 16:12
Tu dis que ton code ne fonctionne pas. Qu'entends tu par là? Ton code doit afficher un nombre "bizarre" qui correspond à l'adresse des données de ton tableau.
C'est toi qui affecte quelque chose à
Un tableau c'est une suite consécutive d'éléments dans la mémoire. Par exemple ici, ton tableau contient 3
Si tu écris:
Si tu écris:
C'est toi qui affecte quelque chose à
arr_ptr, c'est toi qui a choisi de lui faire mémoriser l'adresse du 1er élément de ton tableau.
Un tableau c'est une suite consécutive d'éléments dans la mémoire. Par exemple ici, ton tableau contient 3
char, donc 3 octets successifs. Le premier contient le code ASCII de la lettre 'A', le second celui de la lettre 'B'...
Si tu écris:
printf("%p ", &arr[0] ); // ou printf("%p ", arr_ptr ); puisque arr_ptr == &arr[0]Ça va afficher 3 nombres (en hexa) qui correspondent aux adresses respectives de ces 3 octets, et chaque nombre ici sera égal au précédent + 1, puisqu'il est juste après.
printf("%p ", &arr[1] ); // ou printf("%p ", arr_ptr+1 ); puisque arr_ptr+1, c'est l'adresse de l'élément après celui désigné par arr_ptr
printf("%p\n", &arr[2] ); // ou printf("%p ", arr_ptr+2 );
Si tu écris:
printf("%c ", arr[0] );Ça va afficher A B C.
printf("%c ", arr[1] );
printf("%c\n", arr[2] );