Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Передача членов структур функциям. Передача целых структур функциям.Содержание книги
Поиск на нашем сайте При передаче структур в функцию в качестве типа параметра неоходимо указвать имя структурного типа. void func(key A){printf("Слово %s встречается %d раз",A[i].word,A[i].count); } Передача масствов структур в функцию осуществляется как и передача обычных массивов. Пример. Ввести изфайлаinputfile.dat информацию числе вхожденийключевого слова в текст программы на С. Вывести полученную информацию в файл output.dat. #include #include struct key {// информация числе вхождений ключевого слова в текст программы на С char word[10];// ключевое слово int count;//число вхождений }; key* input(int* n, char* fileName){// ввод из файла //n - размер массива //fileName - имя файла // функция возвращает указатель на массив структур в динамической памяти key* A; FILE *fp; // открытие файла на чтение if ((fp = fopen(fileName, "r")) == NULL) { printf("Нельзя открыть %s\n", "inputfile.dat"); return NULL; } // ввод размера массива структур fscanf(fp,"%d",n); //выделение памяти под массив структур A=(key*)calloc(*n,sizeof(key)); // ввод значений for (int i=0;i<*n;i++){ fscanf(fp,"%s",&A[i].word); fscanf(fp,"%d",&A[i].count); } fclose(fp); return A; } void output(int n, key* A, char* fileName){// вывод в файл массива структур //n - размер массива //А - указатель на массив структур //fileName - имя файла FILE *fp; if ((fp = fopen("outputfile.dat", "w")) == NULL) { printf("Нельзя открыть %s\n", "outputfile.dat"); return; } // вывод значение for (int i=0;i< n;i++){ fprintf(fp,"%s ",A[i].word); fprintf(fp,"%d ",A[i].count); } fclose(fp); } void main() { key *A; //указатель на массив структур int n; // кол-во элементов A=input(&n,"inputfile.dat"); output(n,A,"outputfile.dat"); free(A); }
Указатели на структуры. Средство typedef. Формат указателя на структуру: struct имя_стуктурного_типа *имя_указательной_пременной; Доступ к элементам структурчерез указатели будет осуществляться следующим образом: (*имя_указательной_пременной).элемент или имя_указательной_пременной-> элемент Пример: struct key *pts; // объявляем указатель на структуру key Обращение к элементe count структуры key может осуществляться следующим образом: (*pts).count или же pts->count. Средство typedef Кроме объявлений переменных различных типов, имеется возможность объявить типы. Это можно сделать двумя способами. Первый способ - указать имя тега при объявлении структуры, объединения или перечисления, а затем использовать это имя в объявлении переменных и функций в качестве ссылки на этот тег. Второй - использовать для объявления типа ключевое слово typedef. При объявлении с ключевым словом typedef идентификатор, стоящий на месте описываемого объекта, является именем вводимого в рассмотрение типа данных, и далее этот тип может быть использован для объявления переменных. Отметим, что любой тип может быть объявлен с использованием ключевого слова typedef, включая типы указателя, функции или массива. Имя с ключевым словом typedef для типов указателя, структуры, объединения может быть объявлено прежде чем эти типы будут определенны, но в пределах видимости объявителя. Примеры: typedef double (* MATH)(); /* MATH - новое имя типа, представляющее указатель на функцию, возвращающую значения типа double */ MATH cos; /* cos указатель на функцию, возвращающую значения типа double */ //Можно провести эквивалентное объявление double (* cos)(); typedef char FIO[40] // FIO - массив из сорока символов FIO person; //Переменная person - массив из сорока символов //Это эквивалентно объявлению char person[40]; При объявлении переменных и типов здесь были использованы имена типов (MATH FIO). Помимо этого, имена типов могут еще использоваться в трех случаях: в списке формальных параметров, в объявлении функций, в операциях приведения типов и в операции sizeof (операция приведения типа). Именами типов для основных типов, типов перечисления, структуры и смеси являются спецификаторы типов для этих типов. Имена типов для типов указателя массива и функции задаются при помощи абстрактных описателей следующим образом: спецификатор-типа абстрактный-описатель; Абстрактный-описатель – это описатель без идентификатора, состоящий из одного или более модификаторов указателя, массива или функции. Модификатор указателя (*) всегда задается перед идентификатором в описателе, а модификаторы массива [] и функции () - после него. Таким образом, чтобы правильно интерпретировать абстрактный описатель, нужно начать интерпретацию с подразумеваемого идентификатора. Абстрактные описатели могут быть сложными. Скобки в сложных абстрактных описателе задают порядок интерпретации подобно тому, как это делалось при интерпретации сложных описателей в объявлениях.
|
||
|
Последнее изменение этой страницы: 2021-08-16; просмотров: 116; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.006 с.) |