Структуры в С++
Как вы уже знаете, переменная в 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 лет)
Оставить комментарий
Комментарии


Ужасный код, ужасный материал. Вот адекватный код, более прост и понятен. Я то дойду до конца этого курса, оставляя комментарии над каждой статьей, но вам уже советую уходить отсюда подальше.
#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;
}


Вместо strcpy можно использовать безопасную функцию strcpy _s или strncpy
Источники:
http://msdn.microsoft.com/ru-ru/library/td1esda9.aspx
http://ru.wikipedia.org/wiki/Strcpy




Просто создай пустое консольное приложение.


#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>: пропущен при поиске использования предкомпилированного заголовка"


#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;
}
на здоровье




Заработало после того как написал - #include <cstring>


CODE]strcpy ( MyStructure.sName, "Andy" );[/CODE]
нельзя использовать


*MyStructure.sName
это ссылка на первый символ, поэтому здесь можно присваивать только символ.
Так
MyStructure.sName="Andy";
делать по идее тоже нельзя, т.к. MyStructure.sName в структуре объявлен как массив, а не как указатель
А это:
char *M="Ivan";
указатель. Такое присвоение возможно при инициализации. Если бы ты присваивал строку не во время инициализации, это выглядело бы так:
char *M;
...
M="Ivan"; // Звездочки перед M не нужно


ста компонент и т.д.