2016-06-24 11 views
-5

Ich weiß, unsigned int * und int * sind nicht kompatibel. Aber da i, j sind int * (int Zeiger), wie werden sie mit unsigned Typ gedruckt. Und warum gibt es Ausgang 0 !!Warum ist die Ausgabe so?

#include<stdio.h> 
//#include<conio.h> 
main() 
{ 
    int *i,*j,**k; 
    //i+2; 
    k=&i; 
    printf("\n*k=%u j=%u i=%u",*k,j,i); 
    //getch(); 
} 

Ausgang:

*k=0 j=0 i=0 

Es ist eine der Fragen von 295 C Fragen, ich versuche nur zu verstehen, was in diesem Code passiert !! Ich habe diesen Code nicht geschrieben!

+1

undefiniertes Verhalten für die Verwendung des Wertes eines Objekt mit automatischer Speicherdauer, während es nicht initialisiert wird, nicht definiertes Verhalten um den falschen Typ an 'printf()' zu übergeben. – EOF

+0

Das wirkliche Problem hier ist, dass weder 'i' noch 'j' definiert sind und daher auch nicht '* k' ist. Sie drucken nur undefinierte Werte. Was die Formate angeht, hast du recht, '% u' sollte ein' unsigned int' übergeben werden. –

+0

Verwenden Sie den richtigen Formatbezeichner, um den Zeiger zu drucken. Lesen Sie diesen Link. könnte nützlich für Sie sein..http: //stackoverflow.com/questions/9053658/correct-format-specifier-to-print-pointer-address – sas

Antwort

2

Wie bereits in den Kommentaren erwähnt, haben Sie ein undefiniertes Verhalten, da Sie nicht initialisierte Variablen verwenden, so dass alles gedruckt werden kann (oder das Programm abstürzen könnte).

Stellen Sie also sicher, dass Sie Ihre Variablen initialisieren, bevor Sie sie verwenden.

Auch sollten Sie Zeigerwerte mit% p

int main() 
{ 
    int *i,*j,**k; 

    // Initialize i, j and k 
    int x = 42; 
    i = &x; 
    j = &x; 
    k=&i; 

    // Use i, j and k 
    printf("\n*k=%p j=%p i=%p",(void*)*k, (void*)j, (void*)i); 

    return 0; 
} 

Beispielausgabe drucken:

*k=0xbfd9eb8c j=0xbfd9eb8c i=0xbfd9eb8c 
+0

ya Ich verstehe das, danke! – winter

1

Nichts davon macht Sinn. Sie deklarieren, aber initialisieren die Variablen nicht, was ein undefiniertes Verhalten ist.

Darüber hinaus drucken Sie sie mit dem falschen Format-Spezifizierer, der auch undefiniert Verhalten ist.

Warum ist die Ausgabe so?

Weil Sie die Sprache missbrauchen und als Ergebnis davon kann alles passieren. Es könnte mit einem segfault abstürzen. Es könnte verschiedene Müllwerte drucken. Es ist alles undefiniert.

+0

Ich habe den Code nicht geschrieben, es ist eine der Frage von 295 C Fragen. Versuch nur Sinn zu machen !! – winter