Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передать массив в функцию
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Kir85
Здравствуйте. Есть такой код
Код
......


Вопрос. Как передать в функцию массив? делаю так...
Код
void paint(void logo){
  char    p;//Номер текущей страницы индикатора
  char    c;//Позиция по горизонтали выводимого байта
    for(p=0; p<4; p++) {//Цикл по всем 4-м страницам индикатора
        WriteCode(p|0xB8);//Установка текущей страницы для обоих кристаллов индикатора
        WriteCode(0x00);//Установка текущего адреса для записи данных в 0
        for(c=0; c<61; c++) {//Цикл вывода данных в левую половину индикатора
            WriteDataL(logo);//Вывод очередного байта в индикатор
        }
        for(c=61; c<122; c++) {//Цикл вывода данных в правую половину индикатора
            WriteDataR(logo);//Вывод очередного байта в индикатор
        }
    }
}

пишет что "Error[Pe526]: a parameter may not have void type G:\AVR_CODE\mega8\iar\MT-12232B\main.cpp 155
"
aaarrr
Цитата(Kir85 @ Oct 25 2009, 17:14) *
Вопрос. Как передать в функцию массив?

В таких случаях передается указатель на массив.
Kir85
Напишите, пожалуйста, прямо текст...
zltigo
Цитата(Kir85 @ Oct 25 2009, 17:20) *
Напишите, пожалуйста, прямо текст...

Код
void paint(unsigned char *logo){
...
        for(char c=0; c<61; c++) {//Цикл вывода данных в левую половину индикатора
            WriteDataL( *logo++);//Вывод очередного байта в индикатор
        }
....

Moderator:
Преренесено в раздел для начинающих. Автору крайне желательно начать читать "буквари".
Kir85
Код
paint(Logo122);

При вызове функции ошибка "Error[Pe167]: argument of type "char __flash (*)[122]" is incompatible with parameter of type "unsigned char *" G:\AVR_CODE\mega8\iar\MT-12232B\main.cpp 53
"
zltigo
Цитата(Kir85 @ Oct 25 2009, 18:22) *
"Error[Pe167]: argument of type "char __flash (*)[122]" is incompatible with parameter of type "unsigned char *"

Ну и приведите квалификаторы в соответствие. Для C++ можете вместо указателя воспользоваться передачей параметра по ссылке.
Kir85
Разобрался. Может кому то пригодится...
массив...
Код
__flash char Logo122_1[4][122]={...}

функция...
Код
void paint_1(__flash char logo[4][122]){
  char    p;//Номер текущей страницы индикатора
  char    c;//Позиция по горизонтали выводимого байта
    for(p=0; p<4; p++) {//Цикл по всем 4-м страницам индикатора
        WriteCode(p|0xB8);//Установка текущей страницы для обоих кристаллов индикатора
        WriteCode(0x00);//Установка текущего адреса для записи данных в 0
        for(c=0; c<61; c++) {//Цикл вывода данных в левую половину индикатора
            WriteDataL(logo[p][c]);//Вывод очередного байта в индикатор
        }
        for(c=61; c<122; c++) {//Цикл вывода данных в правую половину индикатора
            WriteDataR(logo[p][c]);//Вывод очередного байта в индикатор
        }
    }
}

вызов функции...
Код
paint_1(Logo122_1);
mempfis_
А так как вам советовали - через указатель - не лучше будет реализовать вашу функцию?
Попробуйте откомпилировать ваш вариант и тот что приведён ниже и сравнить как компилятор передаёт параметры в функцию.
ReAl
Цитата(Kir85 @ Oct 25 2009, 16:14) *
Вопрос. Как передать в функцию массив?

Раз такой вопрос возникает - та тема будет полезной, внимательно просмотрите всю.
http://electronix.ru/forum/index.php?showt...=63888&st=0
mempfis_
Жаль модератор удалил код из поста #8 приняв его за чрезмерное цитирование.
Привожу в кратце что там должно быть чтобы передать массив через указатель

Код
__flash char Logo122_1[4][122]={...}

void paint_1(char __flash  *logo)
{
......................................................
        for(c=0; c<61; c++) {//Цикл вывода данных в левую половину индикатора
            WriteDataL(*logo++);//Вывод очередного байта в индикатор
        }
...........................................................
}
вызов функции...
paint_1(&Logo122_1[0][0]);
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.