C/C++

Массив типа uint8_t. Как изменить в нем все значения разом?

uint8_t ggg[3] = {0, 0, 0} - работает.

Но попытка изменить его
ggg = {1, 1, 1}; приводит к ошибке assigning to array from initializer list.
#include <string.h>
...
memset(ggg, 1, sizeof(ggg));
Андрей Алексеев
Андрей Алексеев
80 864
Лучший ответ
Вячеслав Шкаликов Это частный ответ. Вместо единицы могут быть любые числа.
Роман 12345 Это не за один раз - тут явный цикл :-)
В первом случае у вас агрегатная инициализация, во втором случае попытка присваивания списком инициализации. Инициализация выполняется в момент создания массива. В этот момент под массив выделяется память на стеке и не составляет труда скопировать в неё данные. При условии, что их количество не превышает размер массива. В дальнейшем присваивание невозможно.

Помимо агрегатной инициализации в С++11 введена возможность универсальной инициализации. Её синтаксис:

uint8_t box[3]{ 1, 2, 3 };

Инициализировать массив нулями теперь можно так:

uint8_t box[3]{};

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

В STL в заголовочном файле <numeric> имеется алгоритм iota, с помощью которого можно заполнить массив порядковым целыми значениями начиная с заданного. Например,

int box[25]{};
std::iota(begin(box), end(box), 1); // получите массив, заполненный значениями от 1 до 25 включительно.

Алгоритм std::fill из заголовочного файла <algorithm> позволяет заполнить массив одинаковыми значениями:

int box[25]{};

std::fill(begin(box), end(box), 5); // получите 25 пятёрок

Ниже привожу пример как можно с использованием стандартного алгоритма std::for_each заполнить массив нечётными числами начиная с единицы.
 #include  
#include
using namespace std;
int main() {
int box[15]{};
auto n = 1;
auto fill_odd = [&n](int& x) { x = n; n += 2; };
for_each(begin(box), end(box), fill_odd);
for (auto x : box) cout
Приведённый Вами способ возможен только при инициализации массива. У Вас остаётся два варианта:
1) Присвоить указатель на другую память
2) Построить union с целым четырёхбайтным
Вячеслав Шкаликов "2) Построить union с целым четырёхбайтным"

Это еще что такое?..
тебе нужен std::array

 #include 
//...
std::array arr{ 36,36,36 };

arr = { 25, 28, 29 };