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