Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Инициализация структуры


Автор: yngwie19 30.4.2009, 09:48
Здравствуйте у меня вопрос по поводу инициализации структуры при ее объявлении:
Код

struct
{
    int n;
    char s;
}arr[] = {12,'a',15,'b'};

Правильно ли я инициализирую структуру? или надо так:
Код

struct
{
    int n;
    char s;
}arr[] = {{12,'a'},{15,'b'}};

как правильно? в первом случае программа сама распределяет по элементам массива структуры arr, а во  втором мы ей помогаем 

Автор: azesmcar 30.4.2009, 11:22
yngwie19
оба вариант правильные, только работают они по разному.

С примером думаю будет понятнее

Код

int main()
{
    const int n = 2;
    struct
    {
        int n;
        char s;
        int k;
    }arr[n] = {{12,'a'},{15,'b'}};

    for (int i = 0; i < 2; ++i)
    {
        std::cout << arr[i].k << std::endl;
    }
}

выведет
0
0

Код

int main()
{
    const int n = 2;
    struct
    {
        int n;
        char s;
        int k;
    }arr[n] = {12,'a',15,'b'};

    for (int i = 0; i < 2; ++i)
    {
        std::cout << arr[i].k << std::endl;
    }
}

15
0

Добавлено @ 11:25
Если в словах - то так

Код

arr[n] = {{12,'a'},{15,'b'}};

этот вариант проинициализирует структуру значениями 12, а, а int k оставит проинициализирует по умолчанию (Т()).

Код

arr[] = {12,'a',15,'b'};

а этот вариант проинициализирует структуру значениями 12, а, 15, т.е. воспримет 15 (котоая предназначалась для следующей структуры) как значение для int k.

Добавлено @ 11:27
Добавлю также цитату из стандарта
user posted image

Автор: yngwie19 30.4.2009, 12:41
azesmcar, Спасибо

Автор: azesmcar 30.4.2009, 12:44
yngwie19

Пожалуйста.
Цитата

arr[n] = {{12,'a'},{15,'b'}};
arr[n] = {{12,'a'},{15,'b'}};

один и тот же вариант скопировал smile 
(исправил)

Автор: bsa 30.4.2009, 17:34

M
bsa
yngwie19, если ответ на вопрос получен, то пометь тему решенной

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)