Форум программистов, компьютерный форум CyberForum.ru

Непонятки с размером массива - C++

Восстановить пароль Регистрация
 
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
14.09.2011, 20:44     Непонятки с размером массива #1
Почему так можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    int SIZE=10;
    char ch[10]={'a','b','c','d','e','f','g','h','i','\0'};
    for(int i=0;i<SIZE;i++)
     cout<<ch[i];
    cout<<endl<<endl;
 
    for(char *ptr=ch;*ptr!='\0';ptr++)
     cout<<*ptr;
 
    cout<<endl<<endl;
 
}
,а так нельзя:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    int SIZE=10;
    char ch[SIZE]={'a','b','c','d','e','f','g','h','i','\0'}; /*error: variable-sized object 'ch' may not be initialized|*/
    for(int i=0;i<SIZE;i++)
     cout<<ch[i];
    cout<<endl<<endl;
 
    for(char *ptr=ch;*ptr!='\0';ptr++)
     cout<<*ptr;
 
    cout<<endl<<endl;
 
}
Это я так походу дела на грабли вижу наступил и почему компилятор пишет что ch не может быть так инициализирована, он я так понимаю намекает на то чтобы я инициализацию делал пошаговую в цикле, но почему? Я ведь явно задаю размер массива перед этим и явно хочу его инициализировать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2011, 20:44     Непонятки с размером массива
Посмотрите здесь:

C++ Можно ли коробку размером a\b\c упаковать в посылку размером r\s\t ?
Из массива символов размером 15 вывести на экран элементы с нечетным номером C++
Из заданной матрицы A размером получить матрицу В размером по правилу: первый столбец состоит из положительных элементов, второй – из отрицате C++
C++ Из заданной матрицы A размером N*M получить матрицу В размером K*3 по правилу: первый столбец состоит из полож
C++ Неизвестная ошибка(скорее всего с размером массива\памяти)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
14.09.2011, 20:48     Непонятки с размером массива #2
[QUOTE=Gepar;1984737]
Размерность массива должна быть константным выражением. То есть если вы замените определение

C++
1
    int SIZE=10;
на
C++
1
    const int SIZE=10;
то ошибка исчезнет.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
14.09.2011, 20:50  [ТС]     Непонятки с размером массива #3
Сыроежка, окай, но почему компилятор отказывается инициализировать таким образом мой массив? Потому что он не уверен что все данные которыми я хочу инициализировать массив влезут или чего?
Сыроежка
Заблокирован
14.09.2011, 20:59     Непонятки с размером массива #4
Цитата Сообщение от Gepar Посмотреть сообщение
Сыроежка, окай, но почему компилятор отказывается инициализировать таким образом мой массив? Потому что он не уверен что все данные которыми я хочу инициализировать массив влезут или чего?
Потому что неконстантное выражение может быть изменено, а для массива требуется знать его размер на этапе компиляции. Поэтому в стандарт введено положение, что размерность массива должна задаваться констатным выражением.
Yandex
Объявления
14.09.2011, 20:59     Непонятки с размером массива
Ответ Создать тему
Опции темы

Текущее время: 14:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru