Для определения адрес второго элемента массива необходимо определить смещение, что осуществляется с помощью операции sizeof(тип) (sizeof(int)).
Смещением к i-тому элементу осуществляется по формуле i*sizeof(тип).
Таким образом адрес i-того элемента массива определяется по формуле p+i*sizeof(int).
*sizeof(int) – данную операцию СИ-компилятору можно не указывать, поэтому адрес i-того элемента массива определяется по формуле. Где «p» – указатель, содержащий базовый адрес (начало размещения массива в памяти); - номер элемента массива. p+i – взять значение по адресу.
#include<iostream.h>
#include<conio.h>
Int main ()
{ int a[3]; int *p; p=a;
For (int i=0; i<2; i++) {
Cout<<”a[“<<i<<”]”;
Cin>>*(p+i);
Int sum=0;
Sum+=*(p+i);
Cout<<”\n sum is: “<<sum;
Getch ();
Return 0;
}
Структуры – составной объект, который входит элементы любых типов, за исключением функций.
<Список описателей> – список переменных – структур.
Например: struct student{char fam[30]; int grp; int age;};
Struct{double x,y} s1,s2,s[9];
Struct{int year; char mouth, day} date1, date2;
Тег структуры используется для последующего объявления экземпляров структур. Это осуществляется следующим образом:
<Тег структуры> описатель
Struct student{char fam[30]; int grp;};
Student st1,st2;
Struct {int x,y} s2;
Student st[20];
Доступ к компонентам структуры осуществляется с помощью указания имени экземпляра структуры и следующего через точку имени компонента структуры, например:
1) struct point {int x,y;};
point t1, t2;
T1.x=2;
T1.y=3;
T2.x=4;
T2.y=5;
2) struct student{char fam[30]; int grp;};
student st1,st2;
st1.fam=”Иванов”
st1.grp=103;
st2.fam=”Петров”
st2.grp=103;
char a[7]=”Иванов”
strcpy(st1.fam,”Иванов”);
#include <iostream.h>
#include <conio.h>
Int main()
{ struct student{char fam[30]; int grp;};
For (int i=0; i<9; i++)
{
Cout<<”Введите фамилию студента”;
Cin>>st[i].fam;
Cout<<”\in Введите номер группы”;
Cin>>st[i].grp;
}
For (i=0; i<9; i++)
{
Cout<<endl<<st[i].fam<<”_”<<st[i].grp;
}
Getch();
Return 0;
}
\t – столбиком (табуляция)
Пример1:
Int (2 байта)
Int x;
Int *p;
P=x;
Пример2:
Student st1, st2, st3;
St1.fam=”Иванов”
P+i*sizeof(int)
Для присвоения адреса структурной переменной указателю того же типа используется тот же синтаксис, что и в случае простых переменных.
Адрес элемента структур определяется формулой 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: \n“<<;
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<<”Введите координаты: \n“<<;
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<<”Введите данные о студентах \n”;
For (int i=0; i<10; i++) Cin>>(*(p*+i)->fam)>>(*(p=i)->grp);};
For (int i=0; i<10; i++) cout “\n”<<*(p+i)->fam<<”\t”<<*(p+i)-grp;