Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6308
Последний выпуск: 19.06.2015

Структуры в С++

Автор: Уваров Андрей

Как вы уже знаете, переменная в C/C++ объявляется следующим образом:

int iMyVariable;

В приведенном операторе iMyVariable объявлена как целая переменная. А вот объявление переменной типа char:

char cMyChar;

Такие типы данных, как int, float, char и long, являются неотъемлемой частью C/C++ и вам не нужно писать никакого кода, чтобы сообщить компилятору о том, что означают эти слова. C/C++ позволяет вам также объ-являть свои собственные, специальные типы данных. В следующем разделе вы узнаете, как объявлять структуры, которые можно отнести к специальным типам данных.

Напишите следующий исходный код:

#include <iostream.h>
#include <string.h>
// Объявление структуры.
struct MYSTRUCTURE {
	char sName[100];
	int iAge;
	};

void main(void) {
	MYSTRUCTURE MyStructure;
	strcpy(MyStructure.sName, "Andy" );
	MyStructure.iAge = 13;
	cout << "My name is ";
	cout << MyStructure.sName;
	cout << " and I am ";
	cout << MyStructure.iAge;
	cout << " years old." << endl;
	}

В коде, который вы написали, имеются два оператора #include:

#include <iostream.h>
#include <string.h>

Файл iostream.h включен в код, поскольку в main(void) используется cout. Файл string.h включается потому, что в main(void) используется функция strcpy() (объявленная в файле string.h). Затем вы объявляете структуру:

Struct MYSTRUCTURE {
	char sName[100];
	int iAge;
	};

Обратите внимание на синтаксис объявления структуры. Оно начинается с ключевого слова struct, за которым следует имя типа-структуры. В этой программе типу структуры присвоено имя MYSTRUCTURE. Затем следует собственно определение структуры, заключенное в фигурные скобки. Не забудьте поставить точку с запятой после закрывающей фигурной скобки. Теперь посмотрите на код внутри фигурных скобок:

char sName[100];
int iAge;

Это означает, что MYSTRUCTURE состоит из строки с именем sName и целого с именем iAge, sName и iAge называются элементами данных структуры; Вы объявили их "Внутри" cтруктуры MYSTRUCTURE. Код в main(void) объявляет переменную с именем MyStructure типа MYSTRUCTURE:

MYSTRUCTORE MyStructure;
Вспомните, что в объявляли переменную iNum1 следующим образом:
int iNum1;

Когда вы объявляете MyStructure , которая будет структурой типа MYSTRUCTURE, рассматривайте переменную MyStructure аналогично переменной iNum1. MyStructure - это имя переменной, а ее типом является MYSTRUCTURE точно так же, как типом переменной iNum1 является int. (Обратите внимание, что по традиции имя структуры составлено из символов нижнего регистра или в нем смешаны символы нижнего и верхнего регистров, как, например, в имени MyStructure, но в имени типа структуры используются только символы верхнего регистра, как, например, в MYSTRUCTURE.)

Следующий оператор в main(void) копирует строку 'Andy' в элемент данных MyStructure.sName:

strcpy ( MyStructure.sName, "Andy" );

В этом операторе обращение к элементу данных sName записано как MyStructure.sName Следующий оператор присваивает значение 13 элементу данных iAge cтруктуры MyStructure: MyStructure.iAge - 13; Затем выполняется ряд операторов вывода cout:

cout << "My name is ";
cout << MyStructure.sName;
cout << " and I am ";
cout << MyStructure.iAge;
cout << " years old." << endl;

Сложив все вместе, мы видим, что программа MyStruct выводит сообщение My name is Andy and I am 13 years old. (Меня зовут Andy и мне 13 лет)

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
100K
26 февраля
Blogan
0 / / 26.02.2019
Мне нравитсяМне не нравится
26 февраля 2019, 12:38:43
Если вы (вдруг) дошли до этой части курса, то у меня для вас все еще плохие новости. Я комментирую каждую часть, и чем далее, тем хуже. Какие структуры? Ладно, возможно автор считает, что давать их СРАЗУ - это нормально. Поэтому буду придираться непосредственно к содержанию. Как создавать переменные, автор не объяснил (в предыдущих уроках), то-есть можно ли не ставить префикс, можно ли ставить цифры, пробелы, русские буквы - вопросы все еще открыты. Смотрим на код. Во первых повторюсь, что файла iostream.h уже не существует. Во вторых файл string.h теперь находится в файле cstring и лучше подключать этот файл. В третьих cout и endl не будут сейчас работать без подключения / указания пространства имен std. В четвертых что такое strcpy? Почему автор не объясняет что это функция, что она принимает параметры, КАКИЕ параметры она должна принимать? Чтобы использовать функции, нужно их поминать. В пятых это функция не будет работать на современных IDE (например Visual Studio 2019). Поэтому ее нужно заменить на strcpy_s.
Ужасный код, ужасный материал. Вот адекватный код, более прост и понятен. Я то дойду до конца этого курса, оставляя комментарии над каждой статьей, но вам уже советую уходить отсюда подальше.
#include <iostream>
#include <cstring>
using namespace std;

struct MyStructure
{
char name[100];
int age;
};

int main()
{
MyStructure andy;
strcpy_s(andy.name, "Andy");
andy.age = 13;

cout << "My name is " << andy.name;
cout << " and I am " << andy.age << " years old.\n";

return 0;
}
2.
93K
13 марта 2014 года
new.optimizm
0 / / 13.03.2014
+2 / -0
Мне нравитсяМне не нравится
13 марта 2014, 13:45:20
Функция strcpy устарела (она не учитывает возможноть переполнения буфера), по этому Visual Studio 2013 на неё ругается.
Вместо strcpy можно использовать безопасную функцию strcpy _s или strncpy

Источники:
http://msdn.microsoft.com/ru-ru/library/td1esda9.aspx
http://ru.wikipedia.org/wiki/Strcpy
3.
91K
16 августа 2013 года
Александр Фурманов
0 / / 16.08.2013
+1 / -0
Мне нравитсяМне не нравится
17 августа 2013, 23:11:38
ТАк же скопировал код Voodoo_Spirit`а теперь одна ошибка... что то типо: "Возможно вы забыли добавить #include"StdAfx.h" " Чего делать, народ?
3.1.
98K
13 января 2017 года
tinger
0 / / 13.01.2017
+1 / -0
Мне нравитсяМне не нравится
14 января 2017, 04:25:52
Не нужно создавать программу, как программу MFC.
Просто создай пустое консольное приложение.
4.
91K
16 августа 2013 года
Александр Фурманов
0 / / 16.08.2013
+1 / -0
Мне нравитсяМне не нравится
17 августа 2013, 22:49:53
Слушайте, или я тупой, или код который написан в учебнике этом кривой... У меня выбивает ошибки связанные с #include <iostream.h>
#include <string.h> этими двумя строками вот текст ошибки: "1>c:\users\александр\documents\visual studio 2010\projects\0101\0101\0101.cpp(1): warning C4627: #include <iostream.h>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>c:\users\александр\documents\visual studio 2010\projects\0101\0101\0101.cpp(2): warning C4627: #include <string.h>: пропущен при поиске использования предкомпилированного заголовка"
5.
90K
26 марта 2013 года
Voodoo_Spirit
0 / / 26.03.2013
+2 / -1
Мне нравитсяМне не нравится
26 марта 2013, 16:10:15
Код:
#include <iostream>

#include <string.h>

using namespace std;

// Îáúÿâëåíèå ñòðóêòóðû.

struct MYSTRUCTURE {

    char sName[100];

    int iAge;

    };



int main()

 {

    MYSTRUCTURE MyStructure;

    strcpy(MyStructure.sName, "Andy" );

    MyStructure.iAge = 13;

    cout << "My name is ";

    cout << MyStructure.sName;

    cout << " and I am ";

    cout << MyStructure.iAge;

    cout << " years old." << endl;

    }

на здоровье
6.
85K
19 августа 2012 года
Granpri
0 / / 19.08.2012
+3 / -1
Мне нравитсяМне не нравится
19 августа 2012, 13:23:32
При попытки компиляции обнаруживается 5 ошибок.
7.
85K
12 августа 2012 года
blackpanda
0 / / 12.08.2012
+4 / -3
Мне нравитсяМне не нравится
12 августа 2012, 17:55:09
#include <string.h> - не работает!
Заработало после того как написал - #include <cstring>
8.
Аноним
+8 / -1
Мне нравитсяМне не нравится
30 апреля 2006, 11:45:26
Кто-н подскажет, почему вместо [
CODE]strcpy ( MyStructure.sName, "Andy" );[/CODE]
нельзя использовать
Код:
*MyStructure.sName="Andy";
по аналогии с заполнением простого массива
Код:
char *M="Ivan";

8.1.
98K
13 января 2017 года
tinger
0 / / 13.01.2017
+2 / -0
Мне нравитсяМне не нравится
14 января 2017, 04:24:00
Эта запись:
*MyStructure.sName
это ссылка на первый символ, поэтому здесь можно присваивать только символ.
Так
MyStructure.sName="Andy";
делать по идее тоже нельзя, т.к. MyStructure.sName в структуре объявлен как массив, а не как указатель
А это:
char *M="Ivan";
указатель. Такое присвоение возможно при инициализации. Если бы ты присваивал строку не во время инициализации, это выглядело бы так:
char *M;
...
M="Ivan"; // Звездочки перед M не нужно
9.
Аноним
+7 / -6
Мне нравитсяМне не нравится
31 мая 2005, 18:23:05
Дан файл f,компонент которого является целыми числами.Число компонент файла делится на 100.Записать в файл g наибольшее значение первых ста компонент файла f, затем- следующих
ста компонент и т.д.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог