Le coulage d'un int pointeur vers un char ptr et vice versa
Le problème est simple. Ce que je comprends, GCC soutient que les caractères vont être aligné sur un octet et entiers de 4 octets alignés dans un environnement 32 bits. Je suis également conscient du standard C99 6.3.2.3 qui dit que la conversion entre les mal alignées pointeur-types de résultats non défini opérations. Ce que font les autres normes de C dire à ce sujet? Il y a aussi beaucoup de codeurs expérimentés ici - n'importe quelle vue sur ce sera apprécié.
int *iptr1, *iptr2;
char *cptr1, *cptr2;
iptr1 = (int *) cptr1;
cptr2 = (char *) iptr2;
La conversion de int* en char* fonctionne toujours. À l'inverse, sur certains Processeurs, il fonctionne, sur d'autres il ne l'est pas.
Dans le cas où vous êtes intéressé, à la suite d'examiner un cas particulier: stackoverflow.com/q/25994127/2436175
Dans le cas où vous êtes intéressé, à la suite d'examiner un cas particulier: stackoverflow.com/q/25994127/2436175
OriginalL'auteur LearnerForever | 2010-11-27
Vous devez vous connecter pour publier un commentaire.
Il n'y a qu'une seule norme de C (l'un par l'ISO), avec deux versions (1989 et 1999), plus quelques jolies révisions mineures. Toutes les versions et révisions d'accord sur les points suivants:
char*
seront en mesure de résoudre toutes les donnéesvoid*
est le même quechar*
à l'exception des conversions et ne nécessitent pas de type jetteint*
àchar*
fonctionne toujours, comme le fait convering retour àint*
char*
àint*
n'est pas garantiLes raisons char pointeurs sont garantis de travailler comme cela, c'est afin que vous pouvez, par exemple, copie des entiers à partir de n'importe où dans la mémoire d'ailleurs en mémoire ou sur le disque, et à l'arrière, qui s'avère être une jolie chose utile à faire dans la programmation de bas niveau, par exemple, les bibliothèques graphiques.
OriginalL'auteur
Il y a des big-endian et little-endian pour les Processeurs, de sorte que les résultats ne sont pas définis.
Par exemple, la valeur de 0x01234567 pourrait être 0x12 ou 0x67 pour un char pointeur après la coulée.
OriginalL'auteur Rui Teng
Vous pouvez essayer de faire:
Cela a fonctionné pour moi dans DevCpp!
OriginalL'auteur Aditya