Указатели на структуры
Пример1:
int (2 байта)
int x;
int *p;
p=x;
Пример2:
student st1, st2, st3;
st1.fam=”Иванов”
p+i*sizeof(int)
Для присвоения адреса структурной переменной указателю того же типа используется тот же синтаксис, что и в случае простых переменных.
struct student {char fam[30]; int grp;}
student st1, st2;
student st1;
student *p;
p=st1;
//p->fam=”Иванов”; p->grp=201
Пример3:
Struct st1[25]; //объявление массива структур
Student *p;
P=st;
//32*25
Sizeof(Fam)=sizeof(grp)=Sizeof(student);
Sizeof(student)+ Sizeof(student)=2* Sizeof(student) //адрес 2го элемента структур
…*sizeof(student) //Адрес i-го элемента массива структур
Адрес элемента структур определяется формулой p+i*sizeof(student)
В СИ-компиляторе данную операцию можно не указывать, поэтому адрес i-го элемента массива структур равен p+i.
*(p+i) – взять значение по адресу
Задача:
Определить длину отрезка. При работе с объектом точка использовать структуру, в программе использовать указатель на структуру. Обращение к компонентам структуры осуществить с помощью указателя.
#...
Int main()
{ struct point {x,y}; point t1,t2; Point *p1, *p2; double c;
P1=t1; p2=t2;
Cout<<”Введите x1. y1, y1, y2: “<<;
Cin>>x1>>x2>>y1>>y2;
//T1.x1=2;
//T2.x2=3;
//T1.y1=4;
//T2.y2=5;
Cin<<p1->x1>>p2->y1>>p2->x2
A=(p2->x)-(p1-x);
B=(p2->y)-(p1->y);
C=sqrt(pow(a,2)+pow(b,2));
Cout<<”Длина = “<<c;
Getch();
Return 0;
}
Пример 4:
#include <iostream.h>
#include <conio.h>
#include <math.h>
Int main()
{ struct point {x,y}; point t[2]; double c;
Cout<<”Введите координаты: “<<;
For (int i=0; i<2; i++) {
Cin>>t[i];}
A=x[0]-x[1];
B=y[0]-y[1]
C=sqrt(pow(a,2)+pow(b,2));
Cout<<”Длина = “<<c;
Getch();
Return 0;
Пример 5:
Student st[10]; student *p; p=st
Cout<<”Введите данные о студентах ”;
For (int i=0; i<10; i++) сin>>(*(p*+i)->fam)>>(*(p=i)->grp);};
For (int i=0; i<10; i++) cout “ ”<<*(p+i)->fam<<” ”<<*(p+i)-grp;
getch();
Return 0;
}