Функции Члены Структур В Языке Си
🛑 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻
Функции Члены Структур В Языке Си
Структура — это объединение нескольких объектов, возможно, различного типа под одним именем, которое является типом структуры. В качестве объектов могут выступать переменные, массивы, указатели и другие структуры.
Структуры позволяют трактовать группу связанных между собой объектов не как множество отдельных элементов, а как единое целое. Структура представляет собой сложный тип данных, составленный из простых типов.
Общая форма объявления структуры:
struct ИмяСтруктуры
{
тип ИмяЭлемента1;
тип ИмяЭлемента2;
. . .
тип ИмяЭлементаn;
};
После закрывающей фигурной скобки } в объявлении структуры обязательно ставится точка с запятой.
Пример объявления структуры
struct date
{
int day; // 4 байта
char *month; // 4 байта
int year; // 4 байта
};
В указанном примере структура date занимает в памяти 12 байт. Кроме того, указатель *month при инициализации будет началом текстовой строки с названием месяца, размещенной в памяти.
При объявлении структур, их разрешается вкладывать одну в другую.
Пример
struct persone
{
char lastname[20]; // фамилия
char firstname[20]; // имя
struct date bd; // дата рождения
};
Инициализация полей структуры может осуществляться двумя способами:
В первом способе инициализация осуществляется по следующей форме:
struct ИмяСтруктуры ИмяПеременной={ЗначениеЭлемента1, ЗначениеЭлемента_2, . . . , ЗначениеЭлементаn};
printf("%d %s %d",bd.day, bd.month, bd.year);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#define _CRT_SECURE_NO_WARNINGS
#include
#include
struct date {
int day;
char month[20];
int year;
};
struct persone {
char firstname[20];
char lastname[20];
struct date bd;
};
int main() {
system("chcp 1251");
system("cls");
struct persone p;
printf("Введите имя : ");
scanf("%s", p.firstname);
printf("Введите фамилию : ");
scanf("%s", p.lastname);
printf("Введите дату рождения\nЧисло: ");
scanf("%d", &p.bd.day);
printf("Месяц: ");
scanf("%s", p.bd.month);
printf("Год: ");
scanf("%d", &p.bd.year);
printf("\nВы ввели : %s %s, дата рождения %d %s %d года",
p.firstname, p.lastname, p.bd.day, p.bd.month, p.bd.year);
getchar(); getchar();
return 0;
}
Имя структурной переменной может быть указано при объявлении структуры. В этом случае оно размещается после закрывающей фигурной скобки }. Область видимости такой структурной переменной будет определяться местом описания структуры.
struct complex_type // имя структуры
{
double real;
double imag;
} number; // имя структурной переменной
Поля приведенной структурной переменной: number.real, number.imag .
Объединениями называют сложный тип данных, позволяющий размещать в одном и том же месте оперативной памяти данные различных типов.
Размер оперативной памяти, требуемый для хранения объединений, определяется размером памяти, необходимым для размещения данных того типа, который требует максимального количества байт.
Когда используется элемент меньшей длины, чем наиболее длинный элемент объединения, то этот элемент использует только часть отведенной памяти. Все элементы объединения хранятся в одной и той же области памяти, начиная с одного адреса.
Общая форма объявления объединения
union ИмяОбъединения
{
тип ИмяОбъекта1;
тип ИмяОбъекта2;
. . .
тип ИмяОбъектаn;
};
Например, удобно использовать объединения, когда необходимо вещественное число типа float представить в виде совокупности байтов
#define _CRT_SECURE_NO_WARNINGS
#include
#include
union types
{
float f;
unsigned char b[4];
};
int main()
{
types value;
printf("N = ");
scanf("%f", &value.f);
printf("%f = %x %x %x %x", value.f, value.b[0], value.b[1], value.b[2], value.b[3]);
getchar();
getchar();
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main() {
char temp;
system("chcp 1251");
system("cls");
union
{
unsigned char p[2];
unsigned int t;
} type;
printf("Введите число : ");
scanf("%d", &type.t);
printf("%d = %x шестн.\n", type.t, type.t);
// Замена байтов
temp = type.p[0];
type.p[0] = type.p[1];
type.p[1] = temp;
printf("Поменяли местами байты, получили\n");
printf("%d = %x шестн.\n", type.t, type.t);
getchar(); getchar();
return 0;
}
Используя структуры, можно упаковать целочисленные компоненты еще более плотно, чем это было сделано с использованием массива.
Набор разрядов целого числа можно разбить на битовые поля, каждое из которых выделяется для определенной переменной. При работе с битовыми полями количество битов, выделяемое для хранения каждого поля отделяется от имени двоеточием
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#define YEAR0 1980
struct date
{
unsigned short day : 5;
unsigned short month : 4;
unsigned short year : 7;
};
int main() {
struct date today;
system("chcp 1251");
system("cls");
today.day = 16;
today.month = 12;
today.year = 2013 - YEAR0; //today.year = 33
printf("\n Сегодня %u.%u.%u \n", today.day, today.month, today.year + YEAR0);
printf("\n Размер структуры today : %d байт", sizeof(today));
printf("\n Значение элемента today = %hu = %hx шестн.", today, today);
getchar();
return 0;
}
Работа с массивами структур аналогична работе со статическими массивами других типов данных.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include
#include
struct book
{
char title[15];
char author[15];
int value;
};
int main()
{
struct book libry[3];
int i;
system("chcp 1251");
system("cls");
for (i = 0; i<3; i++)
{
printf("Введите название %d книги : ", i + 1);
gets_s(libry[i].title);
printf("Введите автора %d книги : ", i + 1);
gets_s(libry[i].author);
printf("Введите цену %d книги : ", i + 1);
scanf_s("%d", &libry[i].value);
getchar();
}
for (i = 0; i<3; i++)
{
printf("\n %d. %s ", i + 1, libry[i].author);
printf("%s %d", libry[i].title, libry[i].value);
}
getchar();
return 0;
}
Доступ к элементам структуры или объединения можно осуществить с помощью указателей. Для этого необходимо инициализировать указатель адресом структуры или объединения.
Для организации работы с массивом можно использовать указатель. При этом обращение к полям структуры через указатель будет выглядеть как:
Динамически выделять память под массив структур необходимо в том случае, если заранее неизвестен размер массива. Для определения размера структуры в байтах используется операция sizeof(ИмяСтруктуры).
Пример Библиотека из 3 книг
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include
#include
#include
struct book
{
char title[15];
char author[15];
int value;
};
int main()
{
struct book *lib;
int i;
system("chcp 1251");
system("cls");
lib = (struct book*)malloc(3 * sizeof(struct book));
for (i = 0; i<3; i++)
{
printf("Введите название %d книги : ", i + 1);
gets_s((lib + i)->title);
printf("Введите автора %d книги : ", i + 1);
gets_s((lib + i)->author);
printf("Введите цену %d книги : ", i + 1);
scanf_s("%d", &(lib + i)->value);
getchar();
}
for (i = 0; i<3; i++)
{
printf("\n %d. %s ", i + 1, (lib + i)->author);
printf("%s %d", (lib + i)->title, (lib + i)->value);
}
getchar();
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void MySort(List *list) {
if (list == NULL || list->head == NULL) {
fprintf(stderr, "Список пуст\n");
return;
}
char preNext = ' ';
while (list->head->data == ' ' || list->head->data == '\t') {
printf("CHAR '%c'\n", list->head->data);
if (!DelHead(list)) {
printf("ERR");
return;
}
}
printf("фиксированная буква '%c'\n", list->head->data);
char c = list->head->data;
Item *myNext = list->head->next;
while (myNext->data != ' ') {
myNext = myNext->next;
if (myNext == NULL) return;
}
while (myNext->next != NULL) {
if ( (myNext->data == ' ' || myNext->data == '\t') && myNext->next->data == c && (preNext == ' ' || preNext == '\t')) {
do {
myNext = myNext->next;
if (myNext == NULL) return;
} while ( myNext->data != ' ' && myNext->data != '\t');
} else {
preNext = DelNext(list, myNext);
}
}
}
if ( (myNext->data == ' ' || myNext->data == '\t') && myNext->next->data == c && (preNext == ' ' || preNext == '\t'))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include
#include
#include
#include
struct spisok
{
char FIO[70];
char group[7];
int AvMark;
int Income;
};
int main() {
struct spisok dorm[3];
int i, minwage = 500;
for (i = 0; i < 3; i++) {
printf("Enter FIO %d : ", i + 1);
gets_s(dorm[i].FIO);
printf("Enter group %d : ", i + 1);
gets_s(dorm[i].group);
printf("Enter AvMark %d : ", i + 1);
scanf_s("%d", &dorm[i].AvMark);
printf("Enter Income %d : ", i + 1);
scanf_s("%d", &dorm[i].Income);
printf("\n");
getchar();
}
for (i = 0; i < 3; i++) {
printf("\n%s ", dorm[i].FIO);
printf("\nGroup: ");
printf("%s ", dorm[i].group);
printf("\nAverage mark: ");
printf("%d", dorm[i].AvMark);
printf("\nIncome: ");
printf("%d", dorm[i].Income);
}
getchar();
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include
#include
#define n 3
typedef struct{
char Prizv[20],Osvita[30],Posada[30];
int Vik;}Pracxivniki;
int main(){
clrscr();
Pracxivniki p[n];
int i;
for(i=0;i30)&&(p[i].Osvita!=rt)){
printf("Prizvische: %s",p[i].Prizv);
printf(" Vik: %d",p[i].Vik);
printf(" Osvita: %s",p[i].Osvita);
printf(" Posada: %s\n",p[i].Posada);}}
getch();
return 0;}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include
#include
#include
typedef struct {
int Rik, Mis, Chislo;}Datanarod;
typedef struct {
char Poind[10], Kraina[20], Oblast[20], Raion[20], Misto[20], Vul[20], Bud[10], Kvart[10];}Domadres;
typedef struct {
char Prizv[20], Imia[20], Batko[20], Stat[10], Nacxion[20];
int Zrist, Vaga;
struct Datanarod;
char Nomertel[10];
struct Domadres;}Cholovik;
int main(){
Cholovik *p;
int n,i;
printf("Vvedit kilkist zapisiv\t");
scanf("%d",&n);
p=(Cholovik*) malloc (n*sizeof(Cholovik));
if(p==NULL){
printf("Nestacha pamiati\n");
return -1;}
for(i=0;i
#include
#include
#include
struct price //прайс
{
char nsr[30]; //название товара
char nfr[30]; //название магазина
int nr; //стоимость
};
void in_table(char* FileName)
{
FILE *ou = fopen(FileName, "a+");
struct price item;
rewind(stdin);
printf("Введите:\n");
printf("Название товара: ");
gets(item.nsr);
rewind(stdin);
printf("Название магазина: ");
gets(item.nfr);
printf("Стоимость: ");
scanf("%d", &item.nr);
fwrite(&item, sizeof(struct price), 1, ou);
fclose(ou);
printf("\nДанные записаны в файл.\n");
}
void pnt_item(struct price item)
{
printf("Название магазина: %s\n", item.nfr);
printf("Название товара: %s\n", item.nsr);
printf("Стоимость: %d\n", item.nr);
}
void print_table(char* FileName)
{
FILE *in = fopen(FileName, "r");
struct price item;
while (fread(&item, sizeof(struct price), 1, in))
{
pnt_item(item);
printf("\n");
}
fclose(in);
}
void seach_a_table(char* FileName)
{
FILE *in = fopen(FileName, "r");
struct price item;
char* nfr;
printf("Введите название магазина: ");
scanf("%s", &nfr);
while (fread(&item, sizeof(struct price), 1, in))
:
:
:
fclose(in);
if (k == 0)
printf("магазин %s не найден.\n\n", nfr);
}
int main()
{
system("chcp 1251");
system("cls");
char* fn ="PriceList.dat";
char key;
do {
system("cls");
printf("1 - Ввод информации в прайс\n");
printf("2 - Вывод информации из прайса\n");
printf("3 - Поиск товара в магазине\n");
printf("0 - Выход\n");
key = getch();
system("cls");
switch (key)
{
case '1': in_table(fn); break;
case '2': print_table(fn); break;
case '3': seach_a_table(fn); break;
}
system("pause");
} while (key != '0');
return 0;
}
void seach_a_table(char* FileName)
{
FILE *in = fopen(FileName, "r");
struct price item;
char nfr[30], k = 0;
printf("Введите название магазина: ");
scanf("%d", &nfr);
while (fread(&item, sizeof(struct price), 1, in))
{
if (item.nfr == nfr)
{
pnt_item(item);
printf("\n");
k++;
}
}
fclose(in);
if (k == 0)
printf("магазин %d не найден.\n\n", nfr);
}
void seach_a_table(char* FileName)
{
FILE* in = fopen(FileName, "r");
struct price item;
char nfr[30], k = 0;
printf("Введите название магазина: ");
scanf("%s", &nfr);
while (fread(&item, sizeof(struct price), 1, in))
{
if (strcmp(item.nfr,nfr)==0)
{
pnt_item(item);
printf("\n");
k++;
}
}
fclose(in);
if (k == 0)
printf("магазин %d не найден.\n\n", nfr);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
struct svedenia
{
char surname[15];
char name[15];
char country[20];
char faculty[5];
char group[15];
char semester1_grade[15];
char semester2_grade[15];
} mas[7];
void data_input(int n)
{
FILE *data;
data= fopen("data_to_LAB11.txt", "w");
for(int i=0;i
#include "string.h"
#include "stdlib.h"
#ifndef STUDENT_H_
#define STUDENT_H_
#define SIZE 50
#define N 1000
struct student{
char nm[SIZE];
unsigned char age;
unsigned char course;
};
#endif
#define SIZE 50
int main() {
struct student *a = NULL,b[SIZE],c;
a = (struct student *)malloc(N * sizeof(struct student *));
if (!(a= (struct student *)(int *)malloc(N * sizeof(a)))) {
printf("Allocation error.");
return 1;
}
for (int i = 0; strcmp((a + i)->nm,"0") != 0 ; ++i)
{
scanf("%s",(a + i)->nm);
printf("%s",(a + i)->nm);
}
free(a);
return 0;
}
int i = -1;
do
{
i++;
scanf("%s", (a+i)->nm);
printf("%s", (a+i)->nm);
} while (strcmp((a + i)->nm, "0") != 0);
struct c_struct
{
float x, y, z;
};
struct c_struct *c_function (r)
struct c_struct *r;
{
struct c_struct *r2;
r2 = (struct c_struct *) malloc (sizeof(struct c_struct));
//здесь функция, например:
r2->x = 5.01;
r2->y = r->x;
r2->z = 6.355;
return(r2);
}
struct c_struct *c_function (struct c_struct *r)
Ваш e-mail не будет опубликован. Обязательные поля помечены *
С | Структуры и функции
Сложные типы данных в Си : структуры, объединения, битовые поля
Функция как член структуры - C (СИ) - Киберфорум
Структуры в языке Си.
Структуры в C++ | Уроки С++ - Ravesli | Структуры и функции
Мы зарегистрировали подозрительный трафик исходящий из вашей сети.
С помощью этой страницы мы сможем определить, что запросы отправляете именно вы, а не робот.
Тайский Ганг Банг
Ебли Юных Фото
Список Членов Масонских Лож
Порно Палец В Жопу Мужику
Крутая Порнуха С Толстыми
Зборка Оргазмов Лесби
Оргии В Клубах Онлайн
Русалочка Хентай
Порно Доменирование Онлайн
Тила Текила Редкое Видео
Сложные типы данных в Си : структуры, объединения, бит…
Структуры в языке Си. - YoungCoder
Функции Члены Структур В Языке Си – Telegraph
С | Структуры и функции
Структуры | Программирование на C и C++
Взаимосвязь классов и структур | Программировани…
Структура (язык Си) — Википедия
C++ | Структуры
С++. Лекция 5. Структуры. Перечисления. Объединения ...
Функции Члены Структур В Языке Си