Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Struct home home1; // объявляем структуру как обычную переменную, просто вначале дописываем слово struct

Читайте также:
  1. Classification of the phrase according to the structure.
  2. Discuss the pros and cons of considering the economy as part of the infrastructure of sociocultural systems
  3. Secondary predication and predicative constructions with the verbals
  4. Speak about the classification of the phrase according to the structure and illustrate with the examples.
  5. Structure of political system
  6. Structure of the Human Body
  7. Stylistic characteristics of a sentence structure. Four major principles of creating syntactical stylistic devices. Stylistic inversion.
  8. The grammatical organization of language is not some set of formal structures in speech making, but a very important part of language semantic content.
  9. The structure of Consciousness. Self-consciousness. Reflection.

home1.rooms = 4; //вот так получаем доступ к переменной

Тут все предельно ясно. Давайте рассмотрим еще один пример программы:

  struct database { int rowId; int name; float surname; };   int main() { struct database worker; // объявили переменную-структуру   worker.rowId = 1; worker.name = Denis; worker.surname = Sukhoverkhov; }

Структура с именем database имеет три переменные, rowId, name, surname. Структуру database можно использовать как тип данных для переменной, пример показан в строке 9. Мы создали переменную worker типа database. И теперь, через переменную worker мы можем получить доступ к элементам структуры. Мы можем задать номер строки, имя и фамилию. Доступ к элементам структуры осуществляется через точку. То есть, чтобы поменять значение структуры или считать его, достаточно указать имя перемененной и через точку — элемент структуры. Вы также можете вернуть структуру в качестве возвращаемого значения функции, для этого нужно определить тип возвращаемого значения функции в качестве структурного типа. Например:

  struct database functionName();

Немного подниму тему объединений — union, по сути это все та же структура, за исключением того, что все переменные занимают один и тот же объем памяти. Когда в программе объявляется union, компилятор выделяет достаточно памяти для крупнейшего типа данных в объединении. Это как огромное хранилище, в котором есть одна большая запись, все остальные — маленькие, и этим маленьким записям никогда не понадобится в полном объеме то место, которое им отводится.
Оператор точка "." также используется и для доступа к элементам объединения — union. В качестве последнего замечания, хочу отметить такой момент, если вы работаете со структурой через указатель, то в качестве оператора доступа к элементам структуры нужно использовать оператор ->, вместо оператора ".". Все остальное остается актуальным и для указателей.

  #include <stdio.h>   struct instance { int var; };   int main() { struct instance instance1; struct instance *ptrStruct;   instance1.var = 12; ptrStruct = &instance1; // указатель на структуру   printf("%d\n", ptrStruct->var); // работает как оператор разименования - * getchar(); }

Вот результат работы программы:

CppStudio.com

Если у вас возникнут какие-то вопросы, задавайте их в комментариях или на форуме.

#

Массивы в C (часть 1)

Массивы — очень полезные сущности, особенно в тех случаях, когда необходимо под одним именем объединить группы переменных одного и того же типа, обращаться к таким переменным можно через целочисленный индекс. Например, всем известная игра крестики нолики может быть представлена в виде массива. Размер поля — 3*3 клетки (левая верхняя ячейка может быть нулевым элементом, а правая нижняя клетка 8-м элементом массива). На самом деле, массивы — это самый эффективный способ для хранения большого количества однотипной информации под одним и тем же названием. Массивы могут иметь абсолютно любой тип данных, включая структуры и классы.

Массив можно представить как набор ячеек:

  [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]   Каждая пара квадратных скобочек — это элемент массива, в каждом элементе массива можно хранить отдельное значение. Пора приступить к изучению синтаксиса объявления массива:
  int instanceArray[10]; // мы объявили массив

Мы только что объявили целочисленный массив размером 10 ячеек (мест, в которых значения массива хранятся). Чтобы обратиться к конкретному элементу массива, нужно просто указать имя массива и в квадратных скобках — порядковый номер. Единственно, вам следует знать, что на самом деле первый элемент массива имеет индекс — 0, тогда индекс последнего элемента равен размеру массива минус один. Например, индексы для массива из 10 элементов будут соответствовать этому диапазону: от 0 до 9. Будьте осторожны, никогда не выходите за пределы массива, это может привести к непредсказуемым ошибкам.

Но как вы можете применить только что полученные знания? Допустим, вам нужно сохранить строку, но язык Cи не имеет встроенный типа данных для строк, в таком случае мы можем воспользоваться массивом. Например:

  char string[10];

Этот код позволит нам объявить массив символов из 10 элементов. И мы сможем сохранить в этот массив данные, которые введет пользователь. Первый входной символ сохраниться в нулевую ячейку, второй символ — в 1-ю ячейку и т. д. Таким образом работать со строками — сравнительно легко, потому что это позволяет работать со строками любой длинны и вся строка хранится в одной переменной. А теперь представьте ситуацию, когда пришлось бы хранить строку не в массиве, а в десятках переменных — это не очень удобно. Кроме того, с массивами очень легко работать в цикле, поочереди перебирая каждый элемент массива:

  char string[10]; // символьный массив на 10 элементов   scanf("%s", string); // использование scanf для ввода строки - это очень хороший способ int ct = 0; for (ct = 0; ct < 10; ++ct) { if (string[ct] == 'a') { printf("Вы ввели символ a!\n"); } }

 

Давайте посмотрим, что в этой программе происходит. Функция scanf() считывает вводимую пользователем строку. Первый её параметр — %s говорит о том, что необходимо считать строку. Во втором параметре мы не используем амперсанд, так как второй параметр это указатель на первый элемент массива string. То есть имя массива — это указатель на первый элемент массива, запомните это. Так что мы просто передаем массив непосредственно в scanf() без использования амперсанда и это работает прекрасно.

Кроме того, обратите внимание, что для доступа к элементу массива, мы просто используем квадратные скобки, внутри которых ставим значение, которое нас интересует. В данном случае, мы перебираем элементы от 0 до 9 и проверяем каждый элемент на равенство символу — a. Обратите внимание, что в данном примере есть один не маловажный момент, если пользователь введет строку размером — более 10 символов, то вся строка не поместится в массив и часть строки будет отброшена. Но вы пока на это не обращайте внимание, более подробно работу строк мы рассмотрим в следующем уроке.

 

Нарушение границ массива

  int array[10]; //код... for(int ix = 1; ix <= 10; ix++) cout << array[ix];

«Почему вывод программы содержит неправильные значения?»

Элементы массива индексируются, начиная с 0, а значит, общая длинна на 1 меньше. Например, если у вас есть десять элементов массива, первый элемент находится в положении нуля, а последний элемент в позиции 9.

  int array[10]; //код... for(int ix = 0; ix < 10; ix++) cout << array[ix];

В этом коде границы массива уже не нарушаются.

#




Дата добавления: 2015-02-16; просмотров: 152 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.013 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав