Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 64
1

Передача статического двумерного массива в функцию

19.10.2016, 19:21. Показов 3054. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Visual C++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <locale.h>
#include <string.h>
 
#define N_MAX 5
 
unsigned char my_arr[N_MAX][N_MAX]=
{{1, 2, 3, 4, 5},
{10, 9, 8, 7, 6},
{11, 12, 13, 14, 15},
{20, 19, 18, 17, 16},
{21, 22, 23, 24, 25}};
 
    
unsigned char myfunc (unsigned char **arr, unsigned char line)
{   unsigned char i, max=0;
    for (i=0; i<N_MAX; i++)
     if ( *(*(arr+line)+i) > max) max=*(*(arr+line)+i);
 
    return max;
}
 
int max;
 
void main(void)
{ 
    setlocale(LC_CTYPE, "rus");
    max=myfunc(my_arr, 3);
}
Почему при просмотре переданного в функцию массива arr отладчик возвращает bad pointer?
Заранее благодарю за ответ.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2016, 19:21
Ответы с готовыми решениями:

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

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

Передача двумерного массива в функцию
void FILLING(FILE *file,int n,int m,float** array){ int i; int j; for (i = 0; i &lt; n;...

Передача двумерного массива в функцию
Помогите, пожалуйста, очень нужно.Заранее благодарен. Вот код: #include &lt;stdio.h&gt; #include...

13
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
19.10.2016, 19:35 2
C++
1
unsigned char myfunc (unsigned char arr[][N_MAX], unsigned char line)
0
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 64
19.10.2016, 19:55  [ТС] 3
Цитата Сообщение от nd2 Посмотреть сообщение
unsigned char myfunc (unsigned char arr[][N_MAX], unsigned char line)
Так возможно, но почему не работает мой вариант?
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
19.10.2016, 20:14 4
Потому что твой предназначен для другой структуры массива - на указателях.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
19.10.2016, 20:17 5
Цитата Сообщение от Todini Посмотреть сообщение
Так возможно, но почему не работает мой вариант?
Что значит "не работает"? Он не компилируется.
0
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 64
19.10.2016, 20:35  [ТС] 6
Спасибо за помощь!
Цитата Сообщение от nd2 Посмотреть сообщение
Что значит "не работает"? Он не компилируется.
VS2005 - компилируется.
Цитата Сообщение от nmcf Посмотреть сообщение
Потому что твой предназначен для другой структуры массива - на указателях.
Нашел, что "статический двумерный массив это не указатель на указатель". Будем верить.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
19.10.2016, 20:49 7
Цитата Сообщение от Todini Посмотреть сообщение
Будем верить.
А в голове представлять не будешь? Ну нарисуй на бумаге оба массива.
0
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 64
19.10.2016, 20:58  [ТС] 8
Цитата Сообщение от nmcf Посмотреть сообщение
А в голове представлять не будешь?
Представляю. Статический массив - последовательность элементов массива, динамический массив - массив адресов ячеек с адресами.
0
241 / 0 / 1
Регистрация: 29.11.2015
Сообщений: 208
20.06.2022, 19:06 9
Созданы такие статические массивы:
C
1
2
3
4
5
6
7
8
9
10
static uint16_t const xhs_info[2][6] = {//ширина, высота, кол. байт в строке, кол. байт в символе, кол. символов, номер байта начала блока
    {35, 41, 5, 205, 10, 0},    // Первый блок 
    {20, 41, 3, 123, 1, 2050}   // Второй блок
 };
static unsigned char const font_xhs[] = {  //  35x41,  Отступ сверху0, высота 41
       // '0'  отступ 4,  ширина 28
    0x00, 0x07, 0xFE, 0x00, 0x00, 
    0x00, 0x1F, 0xFF, 0x80, 0x00, 
    0x00, 0x3F, 0xFF, 0xC0, 0x00, 
        .........................................
Пытаюсь передать их в функцию:
C
1
2
       //void lcd_st7735_xhs(int8_t Zifra[], uint8_t Poz_toch, uint16_t inf[2][6], unsigned char font[], uint16_t charColor, uint16_t bkgColor)  
        lcd_st7735_xhs(Zifra, 2, xhs_info[2][6], font_xhs, WHITE, GREEN);
Что только не делал, но от ошибки, выдаваемой Keil-ом, не отделаться. Помогите, пожалуйста, как правильно записать?
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
20.06.2022, 20:23 10
Цитата Сообщение от Юрий_48 Посмотреть сообщение
xhs_info[2][6]
xhs_info
0
241 / 0 / 1
Регистрация: 29.11.2015
Сообщений: 208
20.06.2022, 21:12 11
Цитата Сообщение от zayats80888 Посмотреть сообщение
xhs_info
Спаибо за отклик. Но вот, что получается: Такая конструкция тоже не даёт положительных реэультатов, а именно
uint16_t xhs_info[][6]. Может, где то чего то не объявлено?
Миниатюры
Передача статического двумерного массива в функцию  
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
20.06.2022, 22:17 12
Цитата Сообщение от Юрий_48 Посмотреть сообщение
Может, где то чего то не объявлено?
Ну да, там же написано всё у тебя, квалификатор const убери у своих массивов (или добавь у параметров функций, если функция твоя и не изменяет данные этих массивов)
0
241 / 0 / 1
Регистрация: 29.11.2015
Сообщений: 208
20.06.2022, 22:30 13
Цитата Сообщение от zayats80888 Посмотреть сообщение
Ну да, там же написано всё у тебя, квалификатор const убери у своих массивов (или добавь у параметров функций, если функция твоя и не изменяет данные этих массивов)
Квалификатор const у массивов убрал, а добавить у параметров функций не получается, пишу типа такого: const uint16_t inf[2][6]. Что не правильно?
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
20.06.2022, 22:35 14
Цитата Сообщение от Юрий_48 Посмотреть сообщение
а добавить у параметров функций не получается, пишу типа такого: const uint16_t inf[2][6]. Что не правильно?
Ну не получается и ладно... Я ж написал либо - либо.
0
20.06.2022, 22:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2022, 22:35
Помогаю со студенческими работами здесь

Передача двумерного массива в функцию
void main() { int array,i,j; //********************************************...

Передача в функцию двумерного массива
Здравствуйте. Не могу понять почему программа аварийно завершается. Программа должна печатать...

Передача двумерного массива в функцию
Есть двумерный массив и его необходимо вывести на экран, делать это придется часто, так что вывод...

Передача двумерного массива в функцию
При компиляции программы выдает исключение : &quot;нарушение прав доступа при чтению по адресу&quot; при...

Передача двумерного массива в функцию по указателю
Доброго времени суток. Есть вот такая вот функция сортировки. Да, она примитивная, но мне сейчас не...

Передача двумерного массива в функцию, как указатель
#define _CRT_SECURE_NO_WARNINGS #define SIZE_OF_AREA 10 #include &lt;stdio.h&gt; enum type_Of_Cells...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru