Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Инициировать массив / 11 сообщений из 11, страница 1 из 1
17.05.2004, 13:33
    #32520237
1man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициировать массив
В секции public
float prob[3];

В теле
prob[3]={0.8,0.99,0.99};
Ругается! На синтаксис.

Если опрелелять массив как локальный float prob[3]={0.8,0.99,0.99};
Все ОК!
Что за нафиг?
...
Рейтинг: 0 / 0
17.05.2004, 14:21
    #32520418
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициировать массив
float prob[3]={0.8,0.99,0.99} - через список инициализации можно только инициализировать массив, переприсвоить значение элементов массива таким способом нельзя - prob[3]={0.8,0.99,0.99} приведет к ошибке. Поэтому, ничего лучше не придумать, чем:

Код: plaintext
1.
2.
prob[ 0 ] =  0 . 8 ;
prob[ 1 ] =  0 . 99 ;
prob[ 2 ] =  0 . 99 ;
...
Рейтинг: 0 / 0
17.05.2004, 15:06
    #32520545
1man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициировать массив
Да, когда массив маленький.
Вобще-то я делаю так (когда массив большой)
1. Присваиваю списком локальному массиву a
2. В цикле присваиваю глобальному b=a

Выглядит это все омерзительно. Главное - не пойму, чем вызвано такое ограничение в синтаксисе языка? Или я все же что-то не так делаю?
...
Рейтинг: 0 / 0
17.05.2004, 15:14
    #32520565
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициировать массив
а ты в конструкторе заполняй :)

 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
18.05.2004, 00:27
    #32521267
Mugger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициировать массив
float prob[3]; - это обьявление массива из трех элементов

а в теле prob[3] указывает на третий элемент массива. Т.е. не на три, а на один из трех. А ты ему пытаешся впарить вместо одного числа, сразу три!

Если быть уж совсем точным, ты указываешь на четвёртый элемент, которого даже несуществует(как известно от нуля считает, т.е. в данном случае 0,1,2)!

Как выход из положения, либо при обьявлении указывай, либо циклом.
...
Рейтинг: 0 / 0
25.05.2004, 17:04
    #32533036
wolph
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициировать массив
Загони в файл и читай оттуда в цикле.
...
Рейтинг: 0 / 0
26.05.2004, 12:23
    #32534228
1man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициировать массив
Mugger , Вы ошибаетесь.
float prob[3]={0.1,0.1,0.99}; // - работает. Видимо сначала обрабатывается объявление массива, а затем инициализация. Что логично, т.к. отдельный элемент массива нельзя объявить.
А вот почему то же самое не проходит для массива ГЛОБАЛЬНЫХ переменных?
Грустно.
...
Рейтинг: 0 / 0
26.05.2004, 13:01
    #32534362
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициировать массив
21man
Он в чем то прав
на самом деле тебе можно поставить 2
Код: plaintext
1.
 float prob[ 2 ]={ 0 . 1 , 0 . 1 , 0 . 99 };
 
счет начинается с нуля 0,1,2
что собсвенно и говорили .


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
26.05.2004, 13:51
    #32534563
wolph
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициировать массив
О чем спор-то? В C инициализация и присвоение - разные вещи. Точно так-же можно инициализитовать строкой указатель на char, но присвоить ему строку нельзя.
...
Рейтинг: 0 / 0
01.06.2004, 22:30
    #32543684
c0d310rd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициировать массив
Во-первых, Mugger прав - читайте внимательней. Во-вторых, при инициализации компилятору важно, прежде всего, сколько памяти выделять и с какого адреса выделенная область будет начинаться. Поэтому изначально все было правильно:
float array[3] = {.98, .97, .99};
здесь тройка показывает количество элементов, а не смещение (т.н. индекс).

А вы не пробовали передавать функции указатель на массив и работать с ним?
Или можно создавать массив перед вызовом после возврата обрабатывать и убивать:

//где-то там
void function(float *tmp, ...);

int main(){

//что-то там

float *tmp = new float[3];
function(tmp, ...);
//что-то происходит с tmp
delete [] tmp;

return 0;

}

но я не совсем понимаю, чем так не приглянулись циклы?
...
Рейтинг: 0 / 0
03.06.2004, 11:52
    #32546231
1man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициировать массив
4 Mugger
Извиняюсь, я действительно невнимательно прочитал твой пост. Даже и не пойму из-за чего я так заглючил.
Была надежда, что транслятор распознает что надо сделать присваивание списком прежде чем интерпретирует левую часть оператора, где схожая синтаксическая конструкция означает либо выделение места под массив, либо обращение к элементу масива.

4 JibSkeart
Я допускаю, что в далекой галактике строка
float prob[2]={0.1,0.1,0.99};
сможет хотя бы оттранслироваться, но в моей галактике пишут
float prob[3]={0.1,0.1,0.99};
ПРичем в этом случае
prob[0]=0.1
prob[1]=0.1
prob[2]=0.99
что и требовалось.
"Кол" Вам не ставлю потому что
1) ни грамма не усомнился в Вашем профессионализме - "и на старуху бывает..."
2) Ды фиг его знает, как там в вашей галактике... :)
С искренним уважением 1man

4 c0d310rd
ИМХО способ инициализации списком очень удобен. Почему это не работает для глобальных переменных понятно. Но я не понял, что Вы предлагаете улучшить по сранению с
1) инициализируется массив локальных переменных
2) в цикле его значения переприсваиваются массиву глобальных переменных.
Объявление указателя не помогут инициализации списком. Или я что-то недопонял в Ваших предложениях?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Инициировать массив / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]