Содржините се дел од наставната програма по предметите Информатика ( I и II година за средните училишта ) и предметот Програмски јазици за III и IV година. Наставник м-р Елизабета Левеска
Покажувачи и структури
Што се покажувачи?
посебен тип на променливи кои претставуваат адреса на (друга)
мемориска локација т.е. покажуваат кон мемориската локација на дадената адреса.
Користењето на променливи од тип покажувач нуди две битни погодности во однос на
меморијата:
1. Се проширува меморискиот простор што може да се користи за податоци во една програма
2. Со користење на покажувачките променливи во динамичката меморија, програмата може да се
извршува со помала количина неопходна меморија.
На пример, програмата може да поседува две
многу сложени структури на податоци што не се користат истовремено. Ако овие две структури се
декларираат како глобални променливи, тогаш тие се наоѓаат во сегментот за податоци и завземаат
меморија за цело време на извршувањето на програмата, без оглед дали се користат во моментот или
не.
Но, ако се дефинирани преку покажувачи (динамички), тие се наоѓаат во динамичката меморија и
ќе бидат избришани од неа по престанокот на нивното користење
Програма со која се демонстрира како да декларирате и користите Структурни покажувачи во C++
#include<iostream>
using namespace std;
struct date {
short int dd, mm, yy;
} join_date = {19, 12, 2006};
int main()
{
date *date_ptr;
date_ptr = &join_date;
cout<<"Printing the structure elements using the structure variable\n";
cout<<"dd = "<<join_date.dd<<", mm = "<<join_date.mm<<", yy = "<<join_date.yy<<"\n";
cout<<"\nPrinting the structure elements using the structure pointer\n";
cout<<"dd = "<<date_ptr->dd<<", mm = "<<date_ptr->mm<<", yy = "<<date_ptr->yy<<"\n";
return 0;
}
Output
Printing the structure elements using the structure variable
dd = 19, mm = 12, yy = 2006
Printing the structure elements using the structure pointer
dd = 19, mm = 12, yy = 2006
Покажувачи на структура
Pointer променливата
може да се креира не само за типови податоци како што се (int, float, double
итн.), туку и за типови дефинирани од корисникот, како на
пример структура.
Покажувач на структура во C++ е дефиниран како покажувач кој
укажува на адресата на меморискиот блок што складира структура.
Пример
struct tocka { int x; int y; } t1, *tt1;
t1 е променлива од тип struct tocka, a tt1 е покажувач на структура од тип tocka.
Покажувач може
да се иницијализира со адресата на променливата:
tt1= &t1;
Syntax:
struct name_of_structure *ptr;
// Initialization of structure is done as shown below
ptr = &structure_variable;
// C++ program to demonstrate Pointer to Structure #include <iostream> using namespace std;
struct point { int value; };
int main() { struct point g; // g e instanca-primerok od strukturata point // Initialization of the structure pointer struct point* ptr = &g; // ptr e structure pointer - pokazuvac na struktura point
return 0; }
Пример 1 :
#include <iostream> using namespace std; struct Distance { int feet; float inch; };
int main() { Distance *ptr, d; // pointer variable *ptr i promenliva od tipot struct ptr = &d; // adresata na promenlivata d se skladira vo poiner variable cout << "Enter feet: "; cin >> (*ptr).feet; // pristap vo clenkata feed preku pointer cout << "Enter inch: "; cin >> (*ptr).inch; cout << "Displaying information." << endl; cout << "Distance = " << (*ptr).feet << " feet " << (*ptr).inch << " inches"; return 0; }
Бидејќи покажувачот ptr покажува на променливата d,
(*ptr).inch и d.inch се еквивалентни. Слично, (*ptr).feet и d.feet се
еквивалентни.
Ако користиме покажувачи, пожелно е да пристапиме
до членовите на структурата користејќи го операторот -> (arrow operator),
Бидејќи .(dot operator) операторот има поголем приоритет од операторот
*, *ptr го ставаме во загради , користиме
(*ptr).inch. Поради ова, полесно е да се прават грешки ако двата оператори се
користат заедно во еден код.
ptr->feet е исто со (*ptr).feet
ptr->inch е исто со
(*ptr).inc
Пример 2:
#include <iostream>
using namespace std;
// Structure declaration for teminja
struct GFG {
int x;
int y;
};
// Structure declaration for Square
struct square {
// An object left is declare with 'GFG'
struct GFG left;
// An object right is declared with 'GFG'
struct GFG right;
};
// Function to calculate area of the given Square
void area_Square(struct square s)
{
// Find the area of the Square
//using variables of point
// structure where variables of
// point structure is accessed
// by left and right objects
int area = (s.right.x) * (s.left.x);
// Print the area
cout << area << endl;
}
// Driver Code
int main()
{
// Initialize variable 's'
// with vertices of Square
struct square s = { { 4, 4 }, { 4, 4 } };
// Function Call
area_Square(s);
return 0;
}
Output :
16
Пример 3:
#include<iostream>
using namespace std;
struct emp
{
int empId;
string empName;
float empBasic;
float empExperience;
};
void display(emp *e);
void increase(emp *e);
int main()
{
emp mgr, *eptr;
cout<<"Enter the employee ID: ";
cin>>mgr.empId;
cout<<"Enter the name: ";
cin>>mgr.empName;
cout<<"Enter basic pay: ";
cin>>mgr.empBasic;
cout<<"Enter the experience (in years): ";
cin>>mgr.empExperience;
eptr = &mgr;
cout<<"\nEmployee details before increase()\n";
display(eptr);
increase(eptr);
cout<<"\nEmployee details after increase()\n";
display(eptr);
cout<<endl;
return 0;
}
void display(emp *e)
{
int len = (e->empName).size();
cout<<"Employee ID: "<<e->empId;
cout<<"\nName: "<<e->empName;
cout<<"\tBasic: "<<e->empBasic;
cout<<"\tExperience: "<<e->empExperience<<" years\n";
}
void increase(emp *e)
{
if(e->empExperience >= 5)
{
e->empBasic = e->empBasic + 15000;
}
}
Задачи :
1. Програма со која се внесува и прикажува број на индекс, име, презиме и година на студии на
студент
#include <iostream>
using namespace std;
struct student
{
int index;
string ime;
string prezime;
int godstudii;
};
int main()
{
student s1;
student *sp=&s1;
cout << "vnesi broj na indeks, ime, prezime i god na studii na student" << endl;
No comments:
Post a Comment