C'est un type de cast " à la C" qui devrait être remplacer en C++ avec un type de cast plus spécifique, au pire un reinterpret_cast serait toujours mieux qu'un cast à la "C".
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Mais je crois que reinterpret_cast est valide pour ça maintenant.
Mais la vraie question... Pourquoi? C'est quoi ces trucs pas standards ? Tu es obligé de les utiliser? Ou tu es dans une optique d'apprentissage des pointeurs? (auquel cas. Fuis!)
En fait c'est clairement du C, microsoftien de plus (win32), avec printf_s, ... pas du C++
Sinon, le (int *) en C, c'est un transtypage (typecast) qui indique que le résultat de HeapAlloc doit être converti en / considéré comme l'adresse d'un int, ce qui arrange bien les choses pour l'affecter dans pArr, qui est de ce type int*.
Si la fonction réussit, la valeur de retour est un pointeur vers le bloc de mémoire alloué.
---
On peut faire un parallèle avec ce qui se passait du temps du C d'avant la normalisation (vous étiez pas nés, comme les poissons), quand le type void* n'existait pas, et que la fonction d'allocation malloc était comme ceci
char* malloc(int size);
elle retournait (si tout va bien) l'adresse du premier octet (= char en C) de la zone de taille size allouée dynamiquement.
Alors si voulait allouer un tableau de 10 entiers, on ne pouvait pas faire
int *tab = malloc(10 * sizeof(int)); // incorrect
parce que le résultat de malloc est un char*, type différent de int*.
Alors il fallait forcer la conversion en disant, ok, c'est l'adresse du premier octet, mais c'est aussi l'adresse du premier entier du tableau, donc il faut la considérer comme une adresse d'entier. C'est à ça que sert le "transtypage"
int *tab = (int *) malloc(10 * sizeof(int));
Ensuite, dans leur grande sagesse, les concepteurs du langage ont inventé le type "pointeur générique" void*, et malloc est devenu
void* malloc(int size);
ce qui permet d'écrire
int *tab = malloc(10 * sizeof(int));
parce que les void* sont compatibles avec les autres types de pointeurs.
Evidemment, un quart de siècle plus tard, il traine encore sur internet des cours pas à jour qui disent de faire le transtypage devant malloc, et des codes sources qui donnent l'exemple de ce qu'il ne faut plus faire depuis des lustres.
- Edité par michelbillaud 28 novembre 2023 à 16:15:50
Mais la vraie question... Pourquoi? C'est quoi ces trucs pas standards ? Tu es obligé de les utiliser? Ou tu es dans une optique d'apprentissage des pointeurs? (auquel cas. Fuis!)
Oui, je suis dans une optique d'apprentissage. J'essaye d'appendre windows GDI en utilisant dans un projet. Et il devait pointer vers un BITMAP
L'habitude de gérer ça comme un block continu en mémoire quand on les forgent "à la main" qui m'est resté.
Mais vous voyez bien le truc à la con où on se retrouve avec des champs de type pointeur initialisé avec de la mer.. si on oublie le ZeroMemory.
GDI RIP !!!
Ah, mais le programmeur C sait ce qu'il fait, par définition.
Sinon, une bonne habitude c'est d'initialiser à la déclaration
BITMAP b = {
.bmtype = ...,
....
}
Les champs non cités sont mis à 0.
Ce qui est lié au fait de déclarer les variables à l'endroit oû 1) on on peut leur donner une valeur qui a un sens 2) on va en avoir besoin juste après.
- Edité par michelbillaud 1 décembre 2023 à 18:43:02
Quel est l'objectif final, pour ton apprentissage de GDI ?
Le but est de comparer 2 images. par exemple 2 miniatures d'une vidéo youtube pour savoir si c'est une même vidéos ou pas, les couleurs qui reviennent le plus etc.. .
C'est ce que j'ai fait, la ligne de code de l'exemple est juste repris du lien que j'ai donner dans mon premier message.
bacelar a écrit:
Le GDI de Windows, c'est vieux, assez limité et pas portable.
Il y a une "vraie" raison pour utiliser cette API C dans un programme C++ ?
J'ai expliqué la raison plus haut et donc que préconise tu comme "outils" plus adapté ?
lmghs a écrit:
Puis-je recommander d'apprendre à manipuler un truc qui pourra vraiment potentiellement te servir un jour, genre Qt à la place?
Qt est-il adapté ? J'ai regarder est, c'est une API d'interface graphique... Mais pour avoir accès à tout le service, je crois qu'il faut payer. Donc, ma question est, la partie gratuite est il-il toujours adapté pour ce que je veux faire ?
Encore, une fois merci pour vos nombreuses réponses.
>J'ai expliqué la raison plus haut et donc que préconise tu comme "outils" plus adapté ?
Pourquoi ne pas utiliser des moteurs de recherche d'images ? (qui ne prennent pas des BITMAP en paramètres)
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Aide à la compréhension des pointeurs
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Si vous ne trouvez plus rien, cherchez autre chose.
Discord NaN. Mon site.