219
V1=0;
P1=&v1;
*p1=42;
Cout <
Cout <<*p1<
Орындалу нәтижесі экранға шығарылған кезде:
42
42
Көрсеткіш типтері:
Егер функцияда int типті айнымалыға көрсеткіш болатын, типті параметр қажет
болса, ол Көрсеткіш типін int* деп көрсетеді. Мысалы:
Void manipulatePointer(int* p);
Ал егер сол типті айнымалыны хабарлағыныз келсе, онда * символын типіне емес,
айнымалынын атына қосып жазу керек:
Int *p,*p2;
Бір айнымалы-Көрсеткіштын мәнін екінші айнымалы-Көрсеткішқа меншіктеуге
болады, нәтижесінде бірінші айнымалыда сақталған адрес екінші айнымалыға
көшіріледі:
Мысалы: Егер р1 айнымалыда v1 айнымалының адресі болса, онда опeратор
p2=p1; бұл адресті р2 айнымалыға меншіктейді де, ол да v1 айнымалыға
Көрсеткіш болады. Егер v1 айнымалысы ішінде 42 саны болса, оператор:
cout<<*p2;
экранға 42 санын шығарады:
Көрсеткіш-айнымалылары бар, меншіктеу операторын пайдалану.
Мысал:
Cin >>*p1;
*p1=*p2+7;
Cout <<*p1;
пернетақтаған int типті мәнді орналастырады де, 7 санын қосады және нәтижесін
шығарады.
Мысал: Көрсеткіштерге қолданылатын негізгі операциялар:
p1=p2
8
9
Р1
Р2
Орындалмай тұрып:
Орындалғаннан кейін:
8
9
Р1
Р2
*p1=*p2
8
9
Р1
Р2
Орындалмай тұрып:
9
9
Р1
Р2
Орындалғаннан кейін:
220
//Көрсеткіштермен
және
динамикалық
айнымалылармен
орындалатын
операцияларды демонстрациялау программасы//
# include
Using std:: cout;
Using std::endl;
Int main()
{
Int *p1, *p2;
p1=new int;
*p1=42;
p2=p1;
cout <<”*p1==”<<*p1<
жолға көшу үшін endl немесе “\n” жазылуы мүмкін, ол С++ версиясына
байланысты
cout <<”*p2==”<<*p2<
*p2=53;
Cout <<”*p1==”<<*p1<
Cout <<”*p2==”<<*p2<
p1=new int;
*p1=88;
Cout<<”*p1==”<<*p1<
Cout<<”*p2==”<<*p2<
Cout<<”Hope you got the point of this example!\n”;
Return 0;
}
Диалог мысалы:
*p1=
=42
*p2=
=42
*p1=
=53
*p2=
=53
*p1=
=88
*p2=
=53
Hope
you
got
the
point
of
this
a
?
?
p1
p2
p1=new int;
?
p1
p2
?
б
?
p1
p2
42
*p1=42;
p1
p2
4
р2=р1;
г
5
*р2=53;
д
?
р1=new int;
e
5
8
*р1=88;
ж
5
Int *p1, *p2;
a
в
221
example!
2.Массивтер-айнымалылар және көрсеткіштер- айнымалылар.
Массив типті айнымалы жадыдағы массивтің бірінші элементінің адресі деп
түсіндірілді. Енді сіздің біліміңіз айнымалы басқа айнымалының адресін іште
сақтайтын болса ол Көрсеткіш деген анықтамамен толықтырылды. Сондықтан
С++-те массив типті айнымалы, массивтің бірінші индекстелген айнымалысына
Көрсеткіш деп түсінуге де болады.
Мысал:
//Массив типті айнымалы Көрсеткіш екенің көрсететін программа//
#include
Using std::cout;
Using std::endl;
typedef int* InPtr;
Int main()
{
IntPtr p;
Int a[10];
Int index;
For (index=0; index<10;index++)
a[index]=index;
p=a;
for (index=0; index<10;index++)
cout<<
cout<<”\n”;
for (index=0; index<10; index++)
p[index]=p[index]+1; // P mассивінің элементтерің өзгерткенде
for (index=0; index<10; index++) //а массивінің элементтері өзгеретіне
cout<
cout<<”\n”;
return 0;
}
Диалог мысалы:
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
А int типті айнымалыға Көрсеткіш болғандық ( a[0]) , а айнымалының мәнің р
Көрсеткіш айнмалыға меншіктеуге болады: р=a;
Онда р[0],p[1],… өрнегі ,бұл а массив элементтеріне a[0],a[1],… сілтеме болып
табылады.
3. Көрсеткіштермен орындалатын арифметикалық операциялар:
Программада төменде берілген код бар болсын делік:
Typedef double* DoublePtr;
DoublePtr d;
D= new double[10];
Орындалу нәтижесінде d айнымалысы d[0] элементінің адресін сақтайды. d+1
өрнегі d[1] элементінің адресін, d+2 - d[2] элементінің т.б. сақтайды. Мысалы: егер
222
double типті айнымалыға 8 байт (жадының сегіз үяшығы) қажет болса және d 2001
адресің іште сақтаса, онда d+1 өрнегі 2009 адресін қайтарады. Түсіндірілген
арифметикалық операциялар бұл массив элементтеріне альтернативтік мәлімет
алу мүмкіндігі. Сонымен, arraySize-d динамикалық массивтің өлшемін нұсқайтын
айнымалы, циклi
For (int i=0; i
Cout << *(d+i)<<” “;
Массивтің ішіндегі мәліметерді экранға шығарады. Бұл цикл төмендегі циклге
эквивалентті:
for (int i=0; i
cout <
Көбейту және бөлу операциялары Көрсеткіштерға қолданылмайды..
d++ өрнегі, d Көрсеткіш-айнымалын мәнің көбейтеді, d-- өрнегі, Көрсеткіш-
айнымалыға, алдында тұрған элементтің адресің кіргізіп, берілген мәнді азайтады.
Өзіндік жеке тапсырмалар:
1. Оперативтік жадыда вектор Int X[10] векторы b7f0 адресінен бастап
орналасқан. Мына өрнектердің мәнін табыңыз:
а) Х+1;
б) Х+5;
в) Х-4;
2. Программада Int
P[]={0.2.4.5.6.7.9.12} массиві хабарланған. Мына
өрнектердің мәнің табыңыз:
а) P[3];
б) *P;
в) *[P+4];
г) *(P+P[2]);
3. Өсу тәртібімен, үш айнымалының мәнің сұрыптау функциясың жазыңыз:
4. [0,1] диапазонына түсетің кездейсоқ сандармен, бүтін санды, бір өлшемді
массивті толтыру функциясың жазыңыз.
5. Заттық, бір өлшемді массивтің элементтерінің орта мәнің есептейтің
функцияны жазаңыз. Осы функцияны, ең үлкен орта мәнді жолды анықтау
үшін пайдаланығыз.
Блиц-тест:
1. Int *p;
Int a;
…
p=&a;
p++;
p--;
…
фрагментінің орындалу нәтижесінде р қайда сілтейді?
A) А мәні орналасқан орынға;
B) Ешқайда;
C) А орналасқан орыннан кейінгі ұяшыққа;
D) А орналасқан орынға дейінгі ұяшыққа;
Достарыңызбен бөлісу: |