Несколько вопросов про массивы

ivpoe
Offline
Зарегистрирован: 09.06.2014

Добрый день

Есть пара вопросов про массивы. Не смог ничего найти в документации на эту тему.

1) Как известно, массив можно инициализировать одной строкой, например:

byte mass1[ ] = {180, 30, 255};

Можно ли проделать подобное с уже инициализированным массивом? Т.е. просто присвоить массиву набор значений одной строкой.

2) Как одному массиву присвоить другой?

3) Как правильно передавать и возвращать массивы в функцию? Или этого не стоит делать в ардуино и лучше использовать глобальные массивы?

Заранее огромное спасибо!!!

Looka
Offline
Зарегистрирован: 24.04.2012

1.  Нельзя.

2.  В цикле.

3. Можно.  Какая разница ардуина или нет.  Язык поддерживает.  В качестве аргумента передаетс алрес первого элемента.   Количество элементов массива или глобальная переменная или еще один аргумент  или   определять (договариваться) с последним элементом, как в массиве символов - последний элемент \0

 

А документацию читайте внимательно, там все есть  и примеры  тоже

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Если под присвоением подразумевать копирование, то цикл. Если же под присвоением подразумевать приравнивание одного к другому, то массив можно скопировать по ссылке, присвоив одному массиву адрес другого.

Looka
Offline
Зарегистрирован: 24.04.2012

brokly пишет:

Если под присвоением подразумевать копирование, то цикл. Если же под присвоением подразумевать приравнивание одного к другому, то массив можно скопировать по ссылке, присвоив одному массиву адрес другого.

 

Не....

Это будет все равно один массив, на которы указывает две ссылки.   Это к разделу  копирование указателей....

toly
Offline
Зарегистрирован: 17.05.2014

Не обязательно копировать в цикле по элементам, есть такие замечательные функции как memcpy и strcpy. Первая копирует содержимое одного куска памяти в другой (дать ей нужно указатели на начало и длинну в байтах), вторая почти то же самое, только работает с null-terminated строковыми массивами.