Konstansok használata

Döntsük el, van-e fordítási idejű hiba az alábbi programrészletekben!

 

a)

const char * str="ZH";

str[0]++;

 

b)

const char * str="ZH";

str++;

 

c)

int tomb[ ]={1,2,3};

int* const ptr = tomb;

ptr++;

 

d)

const int tomb[]={1,2,3};

int* ptr=tomb;

 

e)

double tomb[ ]={1.0,2.0,3.14};

double* const ptr = tomb;

ptr++;

A zárthelyire való felkészüléshez tanulmányozzuk át ezt a példát, valamint a laboron megbeszélt hasonló feladatot!



A megoldásért kattints ide!

Pointerek esetén két érték van: maga a pointer értéke, amely egy memóriacím, illetve a pointer által mutatott érték. Mindkettő lehet konstans, a példák arra kérdeznek rá, hogy a két érték közül melyik.

 

a) Itt a mutatott érték a konstans, vagyis nem módosíthatjuk annak első elemét. Így ez a kódrészlet hibás.

 

b) Ebben a kódrészletben is a mutatott érték a konstans, de a pointer értékét változtatjuk. Vagyis ez nem okoz fordítási idejű hibát.

 

c) Ebben a példában a tömb nem konstans, azonban az első elemére mutató pointer értéke igen. Így a pointer értékének megváltoztatásánál hibaüzenetet kapunk.

 

d) Ezúttal a tömb elemei konstansok. Vagyis ha az első konstans elemére nem konstans pointert próbálunk ráállítani, fordítási idejű hibaüzenetet kapunk: konstansról nem konstansra sosincs automatikus konverzió. Ha a pointer konstansra  mutatna, a kódrészlet nem lenne hibás.

 

e) Itt újból a pointer értéke konstans. A konstansot inicializálhatjuk, ezúttal egy tömb elejével. Az inicializáláshoz szükséges konverzió rendben van: a tömb nem konstans egészekből áll, a konstans pointer nem konstans egészre mutat. A konstans pointert ugyanakkor nem növelhetjük meg eggyel, ez fordítási hibát okoz.




2008.01.19. 22:50:48 |  Permalink  |  Hozzászólások száma: 0  |  Tárgyszavak: Nem OO elemek


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások