一回も披露したことのない豆知識

C言語で、下のようなコードがあるとします。
uint32_tの3次元行列の各要素を、uint8_tの要素の引数を持つ関数にポインタを渡し、uint8_tの連続する配列として処理させるようにしたいと思っています。配列var[2][3][4]のメモリ空間での配置イメージは、下に付記した図のようになると思います。

このとき、関数funcを呼び出すときには、どのように記述すればよいでしょうか。
よろしくお願いします。

-------------------------------------------------------------------------------------
#include <stdint.h>
...

void func(uint8_t in[][16]){
...
}

void main(){
uint32_t var[2][3][4];
//
// varの宣言後、各要素に何かしらの値を入れる。
//

//ここで、var[0][0]とvar[0][1]をそれぞれ関数funcに渡し、連続する16個のuint8_tの配列として処理したい。
func(round_key[0]); //このような感じで書きたい。
func(round_key[1]); //このような感じで書きたい。
}


※ 配列var[2][3][4]のメモリ空間での配置イメージ
|----------------------------------------------------------------------------------------
| var[0] ...
|----------------------------------------------------------------------------------------
| var[0][0] | var[0][1] ...
|----------------------------------------------------------------------------------------
| var[0][0][0] | var[0][0][1] | var[0][0][2] | var[0][0][3] | var[0][1][0] | var[0][1][1] ...
|----------------------------------------------------------------------------------------
<------------------------- 16 Byte ------------------------>

A 回答 (1件)

func の引数 uint8_t in[][16] は uint8_t (*in)[16] と等価だから, しかるべきなにかを uint8_t (*)[16] にキャストすればいいだけ.



あとその「配置イメージ」がなにをいっているのかよくわからんのだけど, 例えば var[0] やら var[0][1] やらがメモリ上に存在*しない*ことは理解できているんだね?
    • good
    • 0
この回答へのお礼

>var[0] やら var[0][1] やらがメモリ上に存在*しない*ことは理解できているんだね?
はい。大丈夫です。分かりにくい図ですみませんでした。

頂いた回答で解決できました。
ありがとうございました!

お礼日時:2016/12/25 01:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!