Vergleich der Werte zeigte auf die von void-Zeigern in C

Muss ich vergleichen die Werte von zwei void Zeigern in C. Im folgenden code, ich bin immer in der Konsole ausdrucken, dass Sie anders sind. Es scheint, dass der Vergleich zwischen den Adressen, die in diesen zwei void Zeiger.

Wie kann ich es so machen, dass der code vergleicht Werte (sprich: 1 == 1) der void Zeiger und druckt "same"?

int main(void)
{
    int i = 1;
    int j = 1;
    void *pi = &i;
    void *pj = &j;
    if (pi == pj) {
        printf("same.\n");
    } else {
        printf("different.\n");
    }
    return 0;
}
  • Sie haben keine void-Zeiger haben, dann haben Sie int Zeiger dann *pi == *pj. Aber während dessen ein void-Zeiger, es ist NUR ein Zeiger, sehr schlechte Praxis, um dann zu versuchen und vergleichen, was ist am spitz
  • verwenden memcmp E. g. if(memcmp(pi, pj, sizeof(int))==0){
  • Um genauer zu sein, ich bin zu versuchen, eine verknüpfte Liste, wo die Knoten speichern generische leere Werte. Und in der delete-Methode, würde ich wollen, eine void-Element, das verglichen wird mit den Werten in der verlinkten Liste gelöscht werden. Aber wenn ich versuchte, Sie zu vergleichen, die zwei void-Pointer, obwohl die Werte, die Sie zeigen, sind die gleichen, der Vergleich false zurück. Also, ich Frage mich, ob es einen Weg gibt, zu vergleichen Sie die Werte der Zeiger?
  • Es ist nicht möglich Werte zu vergleichen zeigte void * Zeiger ohne expilcitly sagen dem compiler, wie Sie zu vergleichen. Der compiler weiß es nicht. Nur Sie wissen, wie zu tun. Im einfachsten Fall müssen Sie dem compiler, welche Arten diese Werte mit der Angabe des genauen Typs in der Besetzung. Alternativ können Sie die delete Methode mit dem generischen Vergleich-Funktion (die Sie liefern), nur wie es gemacht wird mit der standard - bsearch oder qsort Funktionen.
InformationsquelleAutor Jie | 2014-09-10
Schreibe einen Kommentar