110 likes | 198 Views
Vakio-osoitin ja osoitin vakioon. Tavallinen osoitin voi vaihtaa osoitettavaa keskusmuistialuetta. Tämä voidaan tehdä sijoittamalla osoittimeen uuden keskusmuistiosoitteen arvo. Tavallisen osoittimen kautta voidaan myös viitata epäsuorasti keskusmuistialueen sisältöön ja muuttaa sitä.
E N D
Vakio-osoitin ja osoitin vakioon • Tavallinen osoitin voi vaihtaa osoitettavaa keskusmuistialuetta. • Tämä voidaan tehdä sijoittamalla osoittimeen uuden keskusmuistiosoitteen arvo. • Tavallisen osoittimen kautta voidaan myös viitata epäsuorasti keskusmuistialueen sisältöön ja muuttaa sitä. • Varattua sanaa const käytetään, kun halutaan suojata osoitin tai osoitettu keskusmuistialue muutoksilta. tMyn
Vakio-osoittimen määrittely: tyyppi* const osoitin=&muuttuja; Koska osoitin on vakio, ei sen sisältöä voi muuttaa. • Osoitetun alueen suojaaminen muutoksilta: const tyyppi* osoitin=&muuttuja; Koska osoitettu tieto on vakio, ei sen sisältöä voi muuttaa. • Voidaan siis erottaa kolme erilaista vaikutusta const-määreen ja osoittimen käytön kanssa: tMyn
1. Osoitetun alueen suojaaminen muutoksilta: const char* totuus=”Tätä juttua et voi muuttaa!”; const char* taasTotuus=”Samat sanat!”; totuus=taasTotuus; Sitä vastoin voit antaa osoitinmuuttujalle totuus jonkin uuden osoitteen! tMyn
#include "stdafx.h" #include <iostream> using namespace System; using namespace std; int main(array<System::String ^> ^args) { const int kokLuku1=20; const int* pInt=&kokLuku1; cout<<"Muuttuja kokLuku1 on vakio,"<<endl <<"eik\204 sen arvoa siis voi muuttaa.. "<<endl <<"Sen arvo on osoittimella katsottuna: " <<*pInt<<"."<<endl; const int kokLuku2=40; Osoittimen tulee myös olla const-tyyppinen! tMyn
const int kokLuku2=40; pInt=&kokLuku2; cout<<"Mutta onhan aina mahdollista antaa "<<endl <<"osoitinmuuttujalle pInt jokin uusi osoite!"<<endl <<"Muuttuja kokLuku2 on vakio"<<endl <<"eik\204 sen arvoa siis voi muuttaa.. "<<endl <<"Sen arvo on osoittimella katsottuna: " <<*pInt<<"."<<endl; return 0; } tMyn
2. Vakiosisältöisen osoittimen määrittely: int luku=44; int* const muuttumaton=&luku; Osoitinmuuttuja muuttumaton voi osoittaa vain ja ainoastaan muuttujaan luku. Muuttujan luku arvoa voidaan sitä vastoin muuttaa. tMyn
#include "stdafx.h" #include <iostream> using namespace System; using namespace std; int main(array<System::String ^> ^args) { int kokLuku1=20; int* const pInt=&kokLuku1; cout<<"Osoitinmuuttuja pInt on vakiosis\204lt\224inen” <<endl <<"joten se voi osoittaa vain muuttujaan kokLuku1"<<endl <<"Sit\204 vastoin muuttuja kokLuku1 ei ole const-tyyppinen!:” <<endl; Nyt muuttuja ei saa olla const-tyyppinen! tMyn
kokLuku1=30; cout<<"Nyt muuttujan kokLuku1 sis\204lt\224 on: " <<*pInt<<"."<<endl; return 0; } tMyn
3. Vakiosisältöinen osoitin muutossuojattuunmuistialueeseen: const int numero=43; const int* const totuus=№ Nyt ei voida muuttaa osoittimen arvoa eikä sen muistialueen arvoa johon osoitetaan! tMyn
#include "stdafx.h" #include <iostream> using namespace System; using namespace std; int main(array<System::String ^> ^args) { const int kokLuku1=20; const int* const pInt=&kokLuku1; cout<<"Osoitinmuuttuja pInt on vakiosis\204lt\224inen"<<endl <<"ja se osoittaa vakioon."<<endl <<"Sit\204 osoitetta mihin pInt osoittaa"<<endl <<"ei voida muuttaa."<<endl tMyn
<<"Sen paikan sis\204lt\224\204 mihin pInt osoittaa"<<endl <<"ei voida my\224sk\204\204n muuttaa."<<endl <<"Muuttujan arvo on "<<*pInt<<"."<<endl; return 0; } tMyn