Warning: incompatible pointer
StudiioZ
Messages postés
2
Statut
Membre
-
Dalfab Messages postés 720 Statut Membre -
Dalfab Messages postés 720 Statut Membre -
Bonjour,
Ca fait maintenant deux jours que j'ai commencé à suivre des tutos pour apprendre à programmer en C.
J'ai passé pas mal de temps à essayer de bien saisir le concept de pointeur car j'ai vite compris que c'est un outil indispensable à maitriser pour pouvoir se lancer dans le language C. Dans la théorie je visualise assez bien ce qu'ils représentent et comment on les utilise mais dans la pratique j'ai quelques soucis.
Voici un exemple de code tout bête qui me renvoie un warning lors de la compilation, quelqu'un pourrait il m'aider à comprendre ce qu'il signifie et ce que je fais de mal ?

le warning est le suivant : "main.c:15:13: warning: assignment to ‘char *’ from incompatible pointer type ‘char (*)[3]’ [-Wincompatible-pointer-types]"
Merci d'avance !
Ca fait maintenant deux jours que j'ai commencé à suivre des tutos pour apprendre à programmer en C.
J'ai passé pas mal de temps à essayer de bien saisir le concept de pointeur car j'ai vite compris que c'est un outil indispensable à maitriser pour pouvoir se lancer dans le language C. Dans la théorie je visualise assez bien ce qu'ils représentent et comment on les utilise mais dans la pratique j'ai quelques soucis.
Voici un exemple de code tout bête qui me renvoie un warning lors de la compilation, quelqu'un pourrait il m'aider à comprendre ce qu'il signifie et ce que je fais de mal ?
le warning est le suivant : "main.c:15:13: warning: assignment to ‘char *’ from incompatible pointer type ‘char (*)[3]’ [-Wincompatible-pointer-types]"
Merci d'avance !
Configuration: Windows / Firefox 96.0
A voir également:
- Warning: incompatible pointer
- Warning zone telechargement - Accueil - Outils
- Téléchargement et streaming illégal : voici les adresses des sites pirates que les FAI vont bloquer - Accueil - Services en ligne
- Symbole warning word ✓ - Forum Word
- Cpu fan fail warning control - Forum Matériel & Système
- Comment faire le symbole attention ✓ - Forum Loisirs / Divertissements
3 réponses
| EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
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
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...
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]
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 ); Ç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.
Si tu écris:
printf("%c ", arr[0] );
printf("%c ", arr[1] );
printf("%c\n", arr[2] );Ça va afficher A B C.