1845 Stimmen

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

Ich bringe immer durcheinander, wie man const int* , const int * const y int const * richtig. Gibt es eine Reihe von Regeln, die festlegen, was Sie tun dürfen und was nicht?

Ich möchte wissen, was ich tun und was ich lassen soll, wenn es um Zuweisungen, die Übergabe an Funktionen usw. geht.

256 Stimmen

Sie können die "Clockwise/Spiral Rule" um die meisten C- und C++-Deklarationen zu entschlüsseln.

76 Stimmen

cdecl.org ist eine großartige Website, die automatisch C-Deklarationen für Sie übersetzt.

11 Stimmen

@Calmarius: Beginnen Sie an der Stelle, an der sich der Typenname befindet bzw. befinden sollte, gehen Sie nach rechts, wenn Sie können, und nach links, wenn Sie müssen. . int *(*)(char const * const) . Beginnen Sie rechts von der eingeklammerten * dann müssen wir nach links gehen: pointer . Außerhalb der Klammern können wir nach rechts gehen: pointer to function of ... . Dann müssen wir nach links gehen: pointer to function of ... that returns pointer to int . Wiederholen Sie den Vorgang, um den Parameter zu erweitern (die ... ) : pointer to function of (constant pointer to constant char) that returns pointer to int . Wie würde die entsprechende einzeilige Erklärung in einer leicht lesbaren Sprache wie Pascal aussehen?

1voto

l.k Punkte 199

Einfache Eselsbrücke:

type Zeiger <- * -> Pointe name


Ich denke gerne an int *i als "die Dereferenzierung von i es int "; in diesem Sinne, const int *i bedeutet "die Deref von i es const int ", während int *const i bedeutet "deref von const i es int ".

(Die einzige Gefahr bei dieser Denkweise besteht darin, dass sie zu einer Bevorzugung von int const *i Erklärungsstil, den die Leute hassen/ablehnen könnten)

-1voto

Abhishek Mane Punkte 583

Viele Leute haben richtig geantwortet, ich werde mich hier gut organisieren und einige zusätzliche Informationen einfügen, die in den gegebenen Antworten fehlen.

Const ist ein Schlüsselwort in der Sprache C, das auch als Qualifier bezeichnet wird. Const kann auf die Deklaration einer beliebigen Variablen angewendet werden, um festzulegen, dass ihr Wert nicht geändert wird

const int a=3,b;

a=4;  // give error
b=5;  // give error as b is also const int 

you have to intialize while declaring itself as no way to assign
it afterwards.

Wie liest man?

Lesen Sie einfach von rechts nach links, jede Aussage funktioniert reibungslos.

3 wesentliche Dinge

type a.    p is ptr to const int

type b.    p is const ptr to int 

type c.    p is const ptr to const int

[Fehler]

if * comes before int 

zwei Typen

1. const int *

2. const const int *

wir schauen zuerst

Haupttyp 1. const int *

Möglichkeiten, 3 Dinge an 3 Stellen anzuordnen 3!=6

i. * zu Beginn

*const int p      [Error]
*int const p      [Error]

ii. const zu Beginn

const int *p      type a. p is ptr to const int 
const *int p      [Error]

iii. int zu Beginn

int const *p      type a. 
int * const p     type b. p is const ptr to int

Haupttyp 2. const const int *

Möglichkeiten, 4 Dinge an 4 Stellen anzuordnen, von denen 2 gleich sind 4!/2!=12

i. * zu Beginn

* int const const p     [Error]
* const int const p     [Error]
* const const int p     [Error]

ii. int zu Beginn

int const const *p      type a. p is ptr to const int
int const * const p     type c. p is const ptr to const int
int * const const p     type b. p is const ptr to int

iii. const zu Beginn

const const int *p     type a.
const const * int p    [Error]

const int const *p      type a.
const int * const p     type c.

const * int const p    [Error]
const * const int p    [Error]

Quetschen alles in einem

Typ a. p ist ptr zu const int (5)

const int *p
int const *p

int const const *p
const const int  *p
const int  const *p

Typ b. p ist const ptr zu int (2)

int * const p
int * const const p;

Typ c. p ist const ptr zu const int (2)

int const * const p
const int * const p

nur eine kleine Berechnung

1. const int * p        total arrangemets (6)   [Errors] (3)
2. const const int * p  total arrangemets (12)  [Errors] (6)

kleines Extra

int const * p,p2 ;

here p is ptr to const int  (type a.) 
but p2 is just const int please note that it is not ptr

int * const p,p2 ;

similarly 
here p is const ptr to int  (type b.)   
but p2 is just int not even cost int

int const * const p,p2 ;

here p is const ptr to const int  (type c.)
but p2 is just const int. 

Fertige

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X