Как мне передать адрес 3-мерного массива в C? - PullRequest
0 голосов
/ 11 февраля 2012

У меня есть 4 "#defines":

    #define MAX_NO_OF_ROUTES    15
    #define MAX_STOPS_IN_ROUTE  50
    #define RAIL_SYMBOL_LEN     3
    #define READ_ADDR       25236

У меня есть 3-мерный массив, объявленный так:

    unsigned char ram_route_info[MAX_NO_OF_ROUTES][MAX_STOPS_IN_ROUTE][RAIL_SYMBOL_LEN];

У меня есть цикл "for" следующим образом:

    for(i = 0 ; i < MAX_NO_OF_ROUTES ; ++i)
    {
        for(j = 0 ; j < MAX_STOPS_IN_ROUTE ; ++j)
        {
            // read from Flash into ram !!
            HL_flash2ram(READ_ADDR, &ram_route_info[i][j][0]);
        }
    }

Прототип функции "HL_flash2ram"

    void HL_flash2ram(long addr, unsigned char* );

Однако при компиляции я получаю предупреждение:

    warning C182: pointer to different objects

Я использую KEILкомпилятор.Я даже попробовал следующее:

    ram_route_info[i][j]
    &(ram_route_info[i][j])
    ram_route_info[i][j][0]

В чем проблема?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

Пройдите этот путь

Прототип функции должен быть

  void HL_flash2ram(long addr, unsigned char  arr[][MAX_STOPS_IN_ROUTE][RAIL_SYMBOL_LEN] );

или

void HL_flash2ram(long addr, unsigned char* arr);

Но в последнем случае доступ к элементу arr [a][b] [c] должно быть выполнено так

*(arr + a*MAX_STOPS_IN_ROUTE*RAIL_SYMBOL_LEN + b*RAIL_SYMBOL_LEN + c)
0 голосов
/ 11 февраля 2012

Вы можете передать его как 'unsigned char *'. (это три звездочки)

...