Ich weiß, Zeiger eines Typs kann auf Zeiger eines anderen Typs gegossen werden, zum Beispiel bei der Verwendung von malloc der void-Zeiger kann auf einen anderen Typ gegossen werden. Aber ich habe diesen Teil des Codes gesehen, der einen Wert direkt in einen Zeigertyp umwandelt. Kannst du mir helfen zu verstehen, was vor sich geht?Zeiger Typ Casting
#include <stdio.h>
#include <stdlib.h>
enum otype {INT, SYM, CONS};
typedef struct obj {
enum otype type;
struct obj *p[1];
} obj;
int
main(void)
{
struct obj *o1 = (obj *) 10;
printf("%d\n", (int) o1);
struct obj *o2 = (obj *) "abc";
printf("%s\n", (char *) o2);
return 0;
}
Nein, Sie werfen keinen 'void *' Zeiger auf einen anderen Typ. Das ist der Punkt, warum 'malloc' ein' void * 'zurückgibt, so dass es direkt dem gewünschten Zeigertyp zugewiesen werden kann. Auch warum "memcmp" 'void *' Argumente nimmt, so dass Sie jeden Typ übergeben können. –
Was Sie mit Ihren Umwandlungen tun, ist eine schlechte Verwendung von Zeigern aus dem Compiler zu verstecken. Und was ist der Zweck des Ein-Element-Arrays? Struct obj * p [1]; '? –
Wieder der Kommentar unten. \t Ich denke, der Punkt des obigen Codes ist, dass der Zeiger nicht dereferenziert wird; es wird vielmehr sein, dass obj den Enum-Typ INT, SYM usw. enthalten kann und das Array darin auf (obj *) 10 oder (obj *) "abc" zeigt; Später können diese Werte dann durch erneutes Konvertieren mit (int) oder (char *) wieder abgerufen werden. So verstehe ich es. Aber ich habe diese Art der Verwendung von Pointer noch nicht gesehen, also frage ich nach dem, was vor sich geht und ob ich falsch liege oder etwas vermisse – james0011