Указание расположения в памяти элементов определенной структуры

Страницы работы

Содержание работы

Задание 1. Указать расположение в памяти элементов следующей структуры:

Struct

{

Int  dint;

Char dchar;

Double ddouble;

}

0

1

2

3

0

0

1

2

3

4

5

6

7

dint

Dchar

Ddouble

Задание 2. Указать длину следующей структуры:

Struct

{

Int  dint[20];           /*Длина равна 40 байт*/

Double ddouble[2];             /*Длина равна 16 байт*/

Char pchar[15];     /*Длина 15 байт*/

}             /*Длина структуры будет равна 71*/

Задание 3. Проинициализировать следующую переменную и указать значения ее элементов  после инициализации:

struct

{

char pchar[2];

int p1, p2;

double d1[10];

} st[3]=

{  {{‘a’,‘b’},1,2,{0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.1}},

{{‘с’,’d’},3,4,{1.1,1.2,1.3,1.4,1.5, 1.6,1.7,1.8,1.9,1.1}},

{{‘e’,’f’},5,6,{2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,2.1}}  }

Результат:                 st[1].p1 = 3

st[2].d1[4] = 2.4

st[0].pchar[2] = b

Задание 4. Найти ошибку инициализации:

Struct

{

int t[5];

double ff[3];

char ccc[8];

} grt [3] = {

{{1},{0.5,0.7,0.9},{0}},

{1},                           //не хватает внутренних скобок {} при описании массива grt [3]

{2}} .                        //не хватает внутренних скобок {} при описании массива grt [3]

Struct

{

int pp[8];

double rrr[2];

char  ch[7];

} grt[3]={{{1,2,3,4,5,6,7,8},{0.5,0.7,0.9},{0}},   // Число 0.9  указано не верно, т.к. размерность

// массива предполагает наличие только двух элементов

{1,3,4,10000},                       //не хватает внутренних скобок {}

{{2},{0},{0,200,190}}};   /*Числа 190, 200 не попадают в диапазон char*/

Задание 5. Найти ошибку:

Struct teg1                             //В списке объявления элементов нельзя использовать тот же тег, что и //при объявлении самой структуры

{

struct teg1 *prev;

struct teg1 * prev1;

struct teg1 *next;                  //при использовании указателя возможно использование того же тега,

//что и в заголовке структуры

struct teg1 next1;          //элемент структуры не может быть структурой того же типа, в которой он //содержится

struct teg1 next2;

}

Задание 6. Указать размер памяти в байтах, занимаемый переменной следующего типа:

Struct teg2

{

unsingned one: 3;             /*3 бита*/

unsingned :          0;            //память для следующего элемента структуры будет начинаться на границе //машинного слова

unsingned three: 3;          /*3 бита*/

};            /*размер памяти – 2 байта*/

Задание 7. Указать схему размещения битовых поле для переменных следующего типа:

Struct teg3

{

unsigned one : 2;

unsigned four : 4;

unsigned nin : 5;

};

one                    four                  nin

2 бита

4 бита

5 бит

...

2 байта

Задание 8. Написать выражение обращения к элементам следующей структуры:

Struct teg4

{

int f[4];

double g[3];

}tyn, *tp;

tyn.f[0]=5;          /*присваивание элемента структуры*/

tyn.g[1]=5;          /*присваивание элемента структуры*/

tp–>f[3]=2;         /*присваивание элемента структуры по ее адресу*/

tp–>g[2]=2;        /*присваивание элемента структуры по ее адресу*/

Задание 9. Указать ошибку.

unsigned *ii;

struct teg2 pp={0x1, 0x3};

ii=&pp.one; /* к битовым полям неприменима операция адресации &.*/

Задание 10. Какие операции из перечисленных разрешены над структурами как единым целым:

- присваивание;                                        /* операции присваивания структур с эквивалентными типами */

- деления;                                                    

- умножения;                                              

- получения адреса;                                /*взять адрес */

- операция syzeof;                                    /*определение размеров в байтах */

- арифметические операции.                  

Задание 11. Указать ошибку:

union

{

char p = ”c”;       /*нельзя инициализировать переменную внутри списка объявления элементов */

double ddd;

int fit;

char byte[5];

}geth = {1.56784};

Задание 12. Составить программу для проверки полученного результата в задании 2. Программу снабдить подробными комментариями.

#include <stdio.h>           //подключение  файла, находящегося в стандартном каталоге

#include <conio.h>          //подключение  файла, находящегося в стандартном каталоге

main()                                 //главная функция, точка входа в программу

{

int r;                                   //описание переменной типа int (знаковая целая)

struct my1                        //объявление структуры с тегом my1

{                                      //список объявления переменных

int dint[20];                  //объявление массива размерностью – 20, элементы которого имеют тип int

double ddouble[2];     //объявление массива размерностью – 2, элементы которого имеют тип

//double

char pchar[15];            // объявление массива размерностью – 15, элементы которого имеют тип char

};

r=sizeof(my1);                //вычисление размера данной структуры с помощью операции sizeof

// с занесением результата в переменную r

printf("\nr=%d",r);           //вывод на экран результата

while(!kbhit());                //организация задержки

}

Результат, выводимый на экране: r=71

Задание 13. Составить программу для получения адресов каждого элемента структуры из задания 1 с целью проверки полученного результата. Программу и результаты снабдить подробными комментариями. Сделать выводы.

#include <stdio.h>           //подключение файла, находящегося в стандартном каталоге

#include <conio.h>          //подключение файла, находящегося в стандартном каталоге

main()                                 //главная функция, точка входа в программу

{

int d2;                                 //описание переменной типа int (знаковая целая)

struct                                 //объявление структуры

{                                      //список объявления переменных

int  dint;                       //объявление переменной, имеющей тип int

char dchar;                  //объявление переменной, имеющей тип char

double ddouble;         //объявление переменной, имеющей тип double

}d1;                               //идентификатор структуры

printf("\n\nd2=%p",&d1.dint);   //вывод на экран адресов каждого элемента структуры

printf("\nd2=%p",&d1.dchar);

printf("\nd2=%p",&d1.ddouble);

while(!kbhit());               //организация задержки

}

Результат: d2=FFEA                       //адрес элемента структуры dint типа int

d2=FFEC                     // адрес элемента структуры dchar типа char

d2=FFED                     // адрес элемента структуры ddouble типа double

Вывод: элементы структуры располагаются в памяти последовательно в соответствии с указанным для него типом.

Похожие материалы

Информация о работе