2012-02-11 7 views
0

I 4 "の#define" を有する:Cで3次元配列のアドレスを渡すにはどうすればよいですか?

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

Iは、3次元配列は、次のように宣言した:

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

次のように私はループ "のために" を有する:

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*); 
です。私はKEILコンパイラを使用してい

warning C182: pointer to different objects 

はコンパイルの、しかし、私は警告を取得します。私も次のように試しました:

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

どうしたの?

+0

これは私にとっては問題ありません。 '&ram_route_info [i] [j] [0]'は 'unsigned char *'型です。 2つの 'for'文が使用されている場所全体の関数を表示してください。 – ouah

+0

それはコンパイラの問題かもしれませんか?おそらく2次元以上の配列を扱うことができないでしょうか? – dinchakpianist

答えて

0

'unsigned char *'として渡すことができます。機能の

プロトタイプは

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

または

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

しかし、[A ARR要素への最後のケースへのアクセスであることが必要

0

峠この方法(つまりは3つのアスタリスク) ] [b] [c]が実行されること

*(arr + a*MAX_STOPS_IN_ROUTE*RAIL_SYMBOL_LEN + b*RAIL_SYMBOL_LEN + c) 
関連する問題