const pointer

mabelleamellie

Neues Mitglied
Hallo zusammen, ist const int *p eine const variable und int * const q ein const zeiger? und was ist genau der Unterschied? Warum ist bei q = NULL genau NULL nicht erlaubt und *p = 0?

C:
#include <stdio.h>

int main(void) {
  const int i = 0;
  const int *p = &i;

  int j = 0;
  int *const q = &j;

  // *p = 0; // Fehler, *p konstant
  p = NULL;

  *q = 0;
  // q = NULL; // Fehler, q konstant

  return 0;
}
 
Zuletzt bearbeitet von einem Moderator:

german

Aktives Mitglied
devCommunity-Experte
Schau gern mal dort hinein: https://dev-community.de/resources/c-pointer.6/

Es ist oft hilfreich Deklarationen von rechts nach links zu lesen.
const int *p
"p ist ein Pointer auf ein int, das konstant ist."
Heißt, der der Pointer (die Speicheradresse auf die gezeigt wird) kann verändert werden. Das int was bei dieser Adresse gespeichert ist, darf aber nicht verändert werden

int * const q
"q ist ein konstanter Pointer auf ein int (das verändbar ist)."
Heißt, der Pointer (die Speicheradresse) darf nicht verändert werden. Der Inhalt (das int) bei diese Adresse darf aber verändert werden.
 
Oben Unten