Was ist der Unterschied zwischen den Operatoren * und & in der C-Programmierung?

Lesezeit: 2 Minuten

Benutzer-Avatar
Wesley

Ich stelle nur sicher, dass ich dieses Konzept richtig verstehe. Mit dem Operator * erstelle ich eine neue Variable, der ein Platz im Speicher zugewiesen wird. Um Variablen und ihre Werte nicht unnötig zu duplizieren, wird der &-Operator bei der Übergabe von Werten an Methoden und dergleichen verwendet und zeigt tatsächlich auf die ursprüngliche Instanz der Variablen, anstatt neue Kopien zu erstellen … Ist das richtig? Es ist offensichtlich ein oberflächliches Verständnis, aber ich möchte nur sicherstellen, dass ich sie nicht durcheinander bringe. Vielen Dank!

  • Sind Sie sicher, dass Sie nicht mit C++ verwechselt werden, das das & als Referenzoperator sowie den Adressoperator verwendet?

    – James Morris

    23. April 2010 um 21:50 Uhr

  • Möglicher Duplikat: stackoverflow.com/questions/2667420

    – sbi

    23. April 2010 um 21:56 Uhr

  • Als Betreiber * und & sind Umkehrungen, wie ++ und --oder + und - oder * und /.

    – aussen

    23. April 2010 um 21:59 Uhr


  • @outis: Außer wenn sie es nicht sind: A*B vs. A&B.

    – sbi

    24. April 2010 um 23:41 Uhr

  • s/operatoren, /operatoren, unär/

    – aussen

    24. April 2010 um 23:58 Uhr

Benutzer-Avatar
Steve Jessop

Nicht ganz. Du verwechselst a * Erscheint in einem Typnamen (der zum Definieren einer Variablen verwendet wird), wobei die * Operator.

int main() {
    int i;    // i is an int
    int *p;   // this is a * in a type-name. It means p is a pointer-to-int
    p = &i;   // use & operator to get a pointer to i, assign that to p.
    *p = 3;   // use * operator to "dereference" p, meaning 3 is assigned to i.
}

  • Wie wäre es mit diesen: *i oder &p haben sie eine bedeutung?

    – mfaani

    15. März 2021 um 13:01 Uhr


Man benutzt & um die Adresse einer Variablen zu finden. Also, wenn Sie haben:

int x = 42;

und (zum Beispiel) der Computer gespeichert hat x am Adressstandort 5, &x wäre 5. Genauso kannst du Laden diese Adresse in einer Variablen namens a Zeiger:

int* pointer_to_x = &x; // pointer_to_x has value 5

Sobald Sie einen Zeiger haben, können Sie Dereferenzierung es mit der * Operator, um es wieder in den Typ umzuwandeln, auf den es zeigt:

int y = *pointer_to_x; // y is assigned the value found at address "pointer_to_x"
                       // which is the address of x. x has value 42, so y will be 42.

Benutzer-Avatar
SteveStifler

Wenn eine Variable mit dem Operator * gepaart wird, enthält diese Variable eine Speicheradresse.

Wenn es mit dem &-Operator gepaart ist, gibt es die Adresse zurück, an der die Variable gespeichert ist.

Wenn du hättest

int x = 5; //5 is located in memory at, for example, 0xbffff804
int *y = &x; //&x is the same thing as 0xbffff804, so y now points to that address

beide x und *y ergäbe 5

1257600cookie-checkWas ist der Unterschied zwischen den Operatoren * und & in der C-Programmierung?

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

Privacy policy