как присвоить одинаковые значения элементам массива

olezhan36
Offline
Зарегистрирован: 29.02.2016

как присвоить одинаковые начальные значения элементам массива.

пробую так  int array[10]={1}; 

в итоге присваивается 1 только первому элементу.

int array[10]={1,1,1,1,1,1,1,1,1,1,1}; -это как утомительно, особенно для многомерных массивов.

У меня есть еще вариант: в setup вставить цикл

for (int i=0; i<10; i++){ 

array[i]=10;

}

Уважаемые программисты.подскажите "зеленому"!

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

Чего-нибудь стандартного для общего случая нет (есть gnu расширение как раз для этого случая, но оно не работает для C++). Бывают костыли, но второй вариант проще всего.

Волшебник
Offline
Зарегистрирован: 22.12.2016

Можно использовать мемсэт http://www.cplusplus.com/reference/cstring/memset/?kw=memset

Но если новичёк, то крутите циклы и не морочьте голову, я и сам предпочёл бы цикл

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

memset ограничен байтовыми значениями.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А в чем проблема?

Чтобы присвоить элементам массива значения цикл необходим. Что бы у Вас ни было написано в коде (считаем, что в языке устраивающая Вас конструкция есть), процессору все равно придется крутить цикл. 

Так что сэкономить не получится. От слова совсем. (нет, 10 байт, конечно, можно присвоить и десятью строками без цикла)

А если Вас вариант цикла не устраивает чисто эстетически, придумайте для него #define как только душеньке угодно.

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017
int array[10];
for (int i = 0; i < sizeof(array); i++) {array[i] = sizeof(array);}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Не в качестве рекомендации, исключительно с иллюстративной целью - фрагменты из широко используемых библиотек.

Официальная библиотека Wiznet, https://github.com/Wiznet/WIZ_Ethernet_Library/blob/master/Arduino%20IDE...

...
uint8_t EthernetClass::_state[MAX_SOCK_NUM] = { 0, };
...
#if defined(WIZ550io_WITH_MACADDRESS)
int EthernetClass::begin(void)
{
  byte mac_address[6] ={0,};
...

Стоковая библиотека Ethernet:

...
uint8_t EthernetClass::_state[MAX_SOCK_NUM] = { 0, 0, 0, 0 };
...

Такое впечатление, что сделано в полном соответствии с отраслевым стандартом "х..як, х..як и в продакшн". Или я чего-то не понимаю в стиле и моде программирования ?

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

sadman41 пишет:

Или я чего-то не понимаю в стиле и моде программирования ?

ты гламурный и стильный прогер

olezhan36
Offline
Зарегистрирован: 29.02.2016

Спасибо откликнувшимся. Буду крутить цикл, так как я совсем новенький еще.

Язык не знаю, с программированием знакомился еще в школе. Пробую все методом гугла и научного тыка.

Пытаюсь переделать скетч под свои нужды.

olezhan36
Offline
Зарегистрирован: 29.02.2016

Еще подскажите как это можно написать в цикле?

   Вот здесь бы прописать датчик не как sensor1, а как к элемент массива sensor[1]
DeviceAddress sensor0 = {0x28, 0xFF, 0x08, 0x26, 0x34, 0x16, 0x04, 0x68};
DeviceAddress sensor1 = {0x28, 0xFF, 0x01, 0x4D, 0x34, 0x16, 0x04, 0x9F};
DeviceAddress sensor2 = {0x28, 0xFF, 0x75, 0x2D, 0x34, 0x16, 0x03, 0xFE};
DeviceAddress sensor3 = {0x28, 0xFF, 0x84, 0x4D, 0x34, 0x16, 0x04, 0x86};
DeviceAddress sensor4 = {0x28, 0xFF, 0x4D, 0x28, 0x34, 0x16, 0x03, 0xC5};
DeviceAddress sensor5 = {0x28, 0xFF, 0xF7, 0x4D, 0x34, 0x16, 0x04, 0xA5};
DeviceAddress sensor6 = {0x28, 0xFF, 0x8C, 0x30, 0x34, 0x16, 0x04, 0x8D};
DeviceAddress sensor7 = {0x28, 0xFF, 0x8C, 0x30, 0x34, 0x16, 0x04, 0x8D};
DeviceAddress sensor8 = {0x28, 0xFF, 0x8C, 0x30, 0x34, 0x16, 0x04, 0x8D};
DeviceAddress sensor9 = {0x28, 0xFF, 0x8C, 0x30, 0x34, 0x16, 0x04, 0x8D};
 
 void getTemp(){   // измеряем температуру  на всех каналах
   DS18B20.requestTemperatures();    
   
   DS18B20TempTmp[0] = DS18B20.getTempC(sensor0); 
   DS18B20TempTmp[1] = DS18B20.getTempC(sensor1); 
   DS18B20TempTmp[2] = DS18B20.getTempC(sensor2);
   DS18B20TempTmp[3] = DS18B20.getTempC(sensor3);
   DS18B20TempTmp[4] = DS18B20.getTempC(sensor4);
   DS18B20TempTmp[5] = DS18B20.getTempC(sensor5);
   DS18B20TempTmp[6] = DS18B20.getTempC(sensor6); 
   DS18B20TempTmp[7] = DS18B20.getTempC(sensor7);
   DS18B20TempTmp[8] = DS18B20.getTempC(sensor8);
   DS18B20TempTmp[9] = DS18B20.getTempC(sensor9);

Тогда и в функции getTemp() можно организовать цикл.

Просьба отвечать максиьально простым языком, для чайника!

sefjor
Offline
Зарегистрирован: 23.02.2017

Полагаю вам очевидно, что нужен массив элементов sensor типа DeviceAddress? Инициализировать его нужно так:

DeviceAddress sensors [] { //указывать количество элементов тут не надо, препроцессор сам посчитает

{0x28, 0xFF, 0x08, 0x26, 0x34, 0x16, 0x04, 0x68},

{0x28, 0xFF, 0x01, 0x4D, 0x34, 0x16, 0x04, 0x9F},

{0x28, 0xFF, 0x75, 0x2D, 0x34, 0x16, 0x03, 0xFE},

{0x28, 0xFF, 0x84, 0x4D, 0x34, 0x16, 0x04, 0x86},

{0x28, 0xFF, 0x4D, 0x28, 0x34, 0x16, 0x03, 0xC5},

{0x28, 0xFF, 0xF7, 0x4D, 0x34, 0x16, 0x04, 0xA5},

{0x28, 0xFF, 0x8C, 0x30, 0x34, 0x16, 0x04, 0x8D},

{0x28, 0xFF, 0x8C, 0x30, 0x34, 0x16, 0x04, 0x8D},

{0x28, 0xFF, 0x8C, 0x30, 0x34, 0x16, 0x04, 0x8D},

{0x28, 0xFF, 0x8C, 0x30, 0x34, 0x16, 0x04, 0x8D},

};

ну и само собой работать в цикле как с обычным массивом

for (int i  = 0; i < 10; ++i)

DS18B20TempTmp[i] =  DS18B20.getTempC(sensors[i]); 

olezhan36
Offline
Зарегистрирован: 29.02.2016

sefjor спасибо. то что нужно

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Клапауций 823 пишет:

int array[10];
for (int i = 0; i < sizeof(array); i++) {array[i] = sizeof(array);}

 

Это у тебя юмор такой? Когда это sizeof возвращал количество элементов массива?

Кол-во элементов массива возвращает конструкция:

sizeof(array) / sizeof(array[0])