Die Initialisierung macht einen Zeiger aus einer ganzen Zahl ohne Umwandlung – C

Lesezeit: 2 Minuten

Tut mir leid, wenn dieser Beitrag als ignorant rüberkommt, aber ich bin noch sehr neu in C, also habe ich kein großes Verständnis dafür. Im Moment versuche ich, Hinweise zu finden.

Ich habe dieses Code-Bit erstellt, um zu testen, ob ich den Wert von b in der Änderungsfunktion ändern und diesen in die Hauptfunktion zurückübertragen lassen kann (ohne zurückzukehren), indem ich den Zeiger übergebe.

Ich erhalte jedoch eine Fehlermeldung, die besagt.

Initialization makes pointer from integer without a cast
    int *b = 6

Von dem, was ich verstehe,

#include <stdio.h>

int change(int * b){
     * b = 4;
     return 0;
}

int main(){
       int * b = 6;
       change(b);
       printf("%d", b);
       return 0;
}

Ich mache mir wirklich Sorgen, diesen Fehler zu beheben, aber wenn mein Verständnis von Zeigern völlig falsch ist, wäre ich Kritik nicht abgeneigt.

  • Seit der change Funktion nichts nützliches zurückgibt, sollten Sie es deklarieren void.

    – Barmar

    29. Oktober 2015 um 1:52 Uhr

Damit es funktioniert, schreiben Sie den Code wie folgt um –

#include <stdio.h>

int change(int * b){
    * b = 4;
    return 0;
}

int main(){
    int b = 6; //variable type of b is 'int' not 'int *'
    change(&b);//Instead of b the address of b is passed
    printf("%d", b);
    return 0;
}

Der obige Code wird funktionieren.

Wenn Sie in C den Wert einer Variablen in einer Funktion ändern möchten, “übergeben Sie die Variable an die Funktion by Referenz“. Mehr dazu können Sie hier lesen – Referenz übergeben

Jetzt bedeutet der Fehler, dass Sie versuchen, eine Ganzzahl ohne Typumwandlung in einer Variablen zu speichern, die ein Zeiger ist. Sie können diesen Fehler beheben, indem Sie diese Zeile wie folgt ändern (das Programm funktioniert jedoch nicht, da die Logik immer noch falsch ist).

int * b = (int *)6; //This is typecasting int into type (int *)

Vielleicht wolltest du das tun:

#include <stdio.h>

int change( int *b )
{
  *b = 4;
  return 0;
}

int main( void )
{
  int *b;
  int myint = 6;

  b = &myint;
  change( &b );
  printf( "%d", b );
  return 0;
}

#include <stdio.h>

int change(int * b){
     * b = 4;
     return 0;
}

int main(){
       int  b = 6; // <- just int not a pointer to int
       change(&b); // address of the int
       printf("%d", b);
       return 0;
}

Vielleicht zu spät, aber als Ergänzung zu den restlichen Antworten nur meine 2 Cent:

void change(int *b, int c)
{
     *b = c;
}

int main()
{
    int a = 25;
    change(&a, 20); --> with an added parameter
    printf("%d", a);
    return 0;
}

Bei Pointer-Deklarationen sollten Sie anderen Variablen nur die Adresse zuweisen, zB “&a”.

1443700cookie-checkDie Initialisierung macht einen Zeiger aus einer ganzen Zahl ohne Umwandlung – C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy