如何在C中传递三维数组的地址?

如何在C中传递三维数组的地址?,c,parameters,multidimensional-array,C,Parameters,Multidimensional Array,我有4个“定义”: 我有一个三维数组,声明如下: 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) {

我有4个“定义”:

我有一个三维数组,声明如下:

    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]);
        }
    }
然而,在编译时,我得到了警告:

    warning C182: pointer to different objects
我正在使用KEIL编译器。我甚至尝试过以下方法:

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

有什么问题吗

可以将其作为“未签名字符*”传递。(这是三个星号)

请这边通过

函数的原型必须是

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

但在最后一种情况下,访问元素arr[a][b][c]是这样执行的

*(arr + a*MAX_STOPS_IN_ROUTE*RAIL_SYMBOL_LEN + b*RAIL_SYMBOL_LEN + c)

我觉得这个不错<代码>&ram\u route\u info[i][j][0]的类型为
无符号字符*
。请显示使用两个
for
语句的整个函数。这可能是编译器的问题吗?可能它无法处理超过2维的数组??
  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*MAX_STOPS_IN_ROUTE*RAIL_SYMBOL_LEN + b*RAIL_SYMBOL_LEN + c)