Quina diferència hi ha entre const int * ptr i int * const ptr?


Resposta 1:

Llegiu-ho enrere

  • int * - punter a intint const * - punter a const intint * const - pointer const a intint const * const - pointer const a const int

Ara la primera const pot estar a banda i banda del tipus així que:

  • const int * == int const * const int * const == int const * const

Si voleu tornar-vos bojos, podeu fer coses així:

  • int ** - punter a punter a intint ** const - un punter de const a un punter a un intint * const * - un punter a un punter de const a una intint const ** - un punter a un punter a una const intint * const * const - un punter de const a un punter de const a una int ...

I per assegurar-nos que tenim clar el significat de const

const int * foo; int * const bar; // nota, és necessari que hàgiu de definir el punter // aquí perquè no podreu canviar-lo més tard;)

foo és un punter variable a una int constant. Això us permet canviar a què apuntau, però no el valor al qual apunteu. Molt sovint això es veu amb trams on teniu un punter a una const. Podeu canviar la cadena a la qual apunteu, però no podeu canviar el contingut d'aquestes cadenes. Això és important quan la cadena mateixa es troba al segment de dades d’un programa i no s’hauria de canviar.

la barra és un punter const o fix a un valor que es pot canviar. Això és com una referència sense el sucre extra sintàctic. A causa d'aquest fet, normalment utilitzaríeu una referència on faríeu servir un punter T * const tret que hagueu de permetre indicadors nuls.


Resposta 2:
  1. const int * ptr o int const * ptr: ptr no és constant però el valor apuntat per ell és constant. ++ ptr és permès, però no es permet ++ * ptr.int * const ptr: ptr és constant, però el valor apuntat per aquest no és constant. ++ ptr no està permès, però es permet ++ * ptr.

Ara podeu esbrinar el significat de const int * const ptr?

Contingut robat (descaradament) robat de la resposta de la meva dona: c: què vol dir això?


Resposta 3:

El primer, és a dir, const int * ptr declara un punter amb el nom ptr i també declara que qualsevol adreça que assigneu al punter ptr diu ptr = & i; ara no podeu canviar "i" per ptr (com per exemple * ptr = * ptr + 10;)

Segona declaració, és a dir, * const ptr defineix un punter la adreça no es pot canviar, per tant, no es pot aplicar operacions aritmètiques en ptr, però es pot en * ptr i.e, el nombre enter que manté


Resposta 4:

El primer, és a dir, const int * ptr declara un punter amb el nom ptr i també declara que qualsevol adreça que assigneu al punter ptr diu ptr = & i; ara no podeu canviar "i" per ptr (com per exemple * ptr = * ptr + 10;)

Segona declaració, és a dir, * const ptr defineix un punter la adreça no es pot canviar, per tant, no es pot aplicar operacions aritmètiques en ptr, però es pot en * ptr i.e, el nombre enter que manté