Was ist der Unterschied zwischen int const * p und const int * p?


Antwort 1:

Hallo,

Die Frage beinhaltet zwei Dinge: Konstante und Zeiger. Nun wissen wir alle, dass wenn eine Variable als Konstante deklariert wird, wir ihren Wert nicht ändern können. Ein Zeiger ist eine Variable, die die Adresse einer anderen Variablen speichert.

Außerdem gibt es zwei Operatoren, die wir in den Zeigern & und * antreffen. & dient zum Zuweisen der Adresse der Variablen zum Zeiger, und * dient zum Verweisen auf den Wert der Stelle, auf die der Zeiger zeigt.

Kommen wir nun auf die Frage,

const int * p ist ein Zeiger auf eine konstante Variable und da wir alle wissen, dass wir den Wert einer Konstanten nicht ändern können, ist die folgende Operation ungültig und gibt einen Fehler aus.

* p = 3; // ungültig hier versuchen wir eine konstante Variable zu ändern.

Aber p = & i; // ist GÜLTIG Ich kann eine beliebige Variable sein

Es gibt eine weitere Möglichkeit, einen Zeiger auf eine Konstante anzugeben, d. h.

int const * p1; // Zeiger auf Konstante int

es gibt noch eine weitere Art von Deklaration, die wir sehen, d. h. int * const p Dies ist als konstanter Zeiger bekannt. Dies bedeutet, dass die Adresse, auf die es zeigt, nicht geändert werden kann, so dass Operationen wie

* p = 3; // wird als gültig angesehen, wenn der Wert der Variablen geändert wird.

ABER p = & i; // wird als ungültig betrachtet, da versucht wird, den Wert der Konstante zu ändern.

Es ist auch möglich, einen konstanten Zeiger auf eine Konstante zu deklarieren. In diesem Fall kann weder der Wert des Zeigers noch der Wert des Basisdatenelements geändert werden. Die Syntax ist

const int * const p;

Hier ist eine Möglichkeit, sich an die Syntax zu erinnern, d. H. In CONSTANT POINTER steht "const" immer nach *.

Wenn Sie mehr über diesen Besuch erfahren möchten, besuchen Sie geeksforgeeks und suchen Sie in C nach const qualifier. Es gibt ein Programm, das mehr erklärt.

hoffe, dies wird einige Zweifel beseitigen.


Antwort 2:

int const * p => p ist ein konstanter Zeiger auf eine Ganzzahlvariable, in der die durch p angegebene Adresse konstant ist (nicht geändert werden kann) und der Wert in dieser Adresse geändert werden kann

const int * p => p ist ein Zeiger auf eine konstante Ganzzahlvariable, bei der der Wert in der durch p angezeigten Adresse konstant ist und die durch p angezeigte Adresse geändert werden kann


Antwort 3:
Const und Zeiger:

Es ist wichtig, zwischen einem Zeiger auf eine Konstante und einem zu unterscheiden
konstanter Zeiger auf eine Variable.

Hier ist ein Zeiger auf eine Konstante:

  const int * p;

Die folgende Anweisung ist ungültig, da versucht wird, die zu ändern
Wert einer Konstante:

  * p = 3;

Aber dieser ist legal, weil der Zeiger selbst keine Konstante ist:

  p = & x;

Andererseits zeigt diese Deklaration einen konstanten Zeiger auf eine Variable.

  int * const p;

In diesem Fall ist die folgende Anweisung zulässig, da die Variable geändert werden kann:

  * p = 3;

Dies ist jedoch nicht der Fall, da versucht wird, den Wert einer Konstanten zu ändern.

  p = & x;

Es ist möglich, einen konstanten Zeiger auf eine Konstante zu deklarieren. Darin
Fall weder der Wert des Zeigers noch der Wert der Basisdaten
Artikel kann geändert werden:

  const int * const p;


Hier ist eine Möglichkeit, sich an die Syntax zu erinnern (von Bjarne Stroustrup):

Beachten Sie, dass in const-Zeigern "const" immer nach dem "*" steht. Zum
Beispiel:

  int * const p1 = q; // Konstantenzeiger auf int Variable
  int const * p2 = q; // Zeiger auf Konstante int
  const int * p3 = q; // Zeiger auf Konstante int

Eine andere Möglichkeit besteht darin, sich "*" als Erfassung des größten Links vorzustellen
Einheit, die es kann. "Const" erfasst die kleinste Einheit, links oder rechts,
das ist können. Denken Sie also an die obigen Beispiele als:

  (int *) const p1 = q; // Konstantenzeiger auf int Variable
  (int const) * p2 = q; // Zeiger auf Konstante int
  (const int) * p3 = q; // Zeiger auf Konstante int

Mit anderen Worten ist das Qualifikationsmerkmal unmittelbar vor der Variablen
das erste Wort der Definition.


Antwort 4:
Const und Zeiger:

Es ist wichtig, zwischen einem Zeiger auf eine Konstante und einem zu unterscheiden
konstanter Zeiger auf eine Variable.

Hier ist ein Zeiger auf eine Konstante:

  const int * p;

Die folgende Anweisung ist ungültig, da versucht wird, die zu ändern
Wert einer Konstante:

  * p = 3;

Aber dieser ist legal, weil der Zeiger selbst keine Konstante ist:

  p = & x;

Andererseits zeigt diese Deklaration einen konstanten Zeiger auf eine Variable.

  int * const p;

In diesem Fall ist die folgende Anweisung zulässig, da die Variable geändert werden kann:

  * p = 3;

Dies ist jedoch nicht der Fall, da versucht wird, den Wert einer Konstanten zu ändern.

  p = & x;

Es ist möglich, einen konstanten Zeiger auf eine Konstante zu deklarieren. Darin
Fall weder der Wert des Zeigers noch der Wert der Basisdaten
Artikel kann geändert werden:

  const int * const p;


Hier ist eine Möglichkeit, sich an die Syntax zu erinnern (von Bjarne Stroustrup):

Beachten Sie, dass in const-Zeigern "const" immer nach dem "*" steht. Zum
Beispiel:

  int * const p1 = q; // Konstantenzeiger auf int Variable
  int const * p2 = q; // Zeiger auf Konstante int
  const int * p3 = q; // Zeiger auf Konstante int

Eine andere Möglichkeit besteht darin, sich "*" als Erfassung des größten Links vorzustellen
Einheit, die es kann. "Const" erfasst die kleinste Einheit, links oder rechts,
das ist können. Denken Sie also an die obigen Beispiele als:

  (int *) const p1 = q; // Konstantenzeiger auf int Variable
  (int const) * p2 = q; // Zeiger auf Konstante int
  (const int) * p3 = q; // Zeiger auf Konstante int

Mit anderen Worten ist das Qualifikationsmerkmal unmittelbar vor der Variablen
das erste Wort der Definition.


Antwort 5:
Const und Zeiger:

Es ist wichtig, zwischen einem Zeiger auf eine Konstante und einem zu unterscheiden
konstanter Zeiger auf eine Variable.

Hier ist ein Zeiger auf eine Konstante:

  const int * p;

Die folgende Anweisung ist ungültig, da versucht wird, die zu ändern
Wert einer Konstante:

  * p = 3;

Aber dieser ist legal, weil der Zeiger selbst keine Konstante ist:

  p = & x;

Andererseits zeigt diese Deklaration einen konstanten Zeiger auf eine Variable.

  int * const p;

In diesem Fall ist die folgende Anweisung zulässig, da die Variable geändert werden kann:

  * p = 3;

Dies ist jedoch nicht der Fall, da versucht wird, den Wert einer Konstanten zu ändern.

  p = & x;

Es ist möglich, einen konstanten Zeiger auf eine Konstante zu deklarieren. Darin
Fall weder der Wert des Zeigers noch der Wert der Basisdaten
Artikel kann geändert werden:

  const int * const p;


Hier ist eine Möglichkeit, sich an die Syntax zu erinnern (von Bjarne Stroustrup):

Beachten Sie, dass in const-Zeigern "const" immer nach dem "*" steht. Zum
Beispiel:

  int * const p1 = q; // Konstantenzeiger auf int Variable
  int const * p2 = q; // Zeiger auf Konstante int
  const int * p3 = q; // Zeiger auf Konstante int

Eine andere Möglichkeit besteht darin, sich "*" als Erfassung des größten Links vorzustellen
Einheit, die es kann. "Const" erfasst die kleinste Einheit, links oder rechts,
das ist können. Denken Sie also an die obigen Beispiele als:

  (int *) const p1 = q; // Konstantenzeiger auf int Variable
  (int const) * p2 = q; // Zeiger auf Konstante int
  (const int) * p3 = q; // Zeiger auf Konstante int

Mit anderen Worten ist das Qualifikationsmerkmal unmittelbar vor der Variablen
das erste Wort der Definition.