「Androidを支える技術<I>」の読書会1回目を開催しました。自分が主催する勉強会としては、初めて一般に公開したものになります。

 

開催が急に決まったため告知期間が1週間程度しかなかったので心配しましたが主催者込みで4人集まったので良かったです。

 

分担を決めて担当範囲を読み上げながら適宜補足説明や疑問点があれば自ら質問もし、他の参加者も議論に参加するスタイルでやってみました。ほどよく脱線しながら良い雰囲気で勉強会ができたと思います。

 

今回は1章の途中まででした。次回は告知期間が長いので参加者がもう少し増えると良いなと思います。

 

先日、C言語勉強会20回目を開催しました。

 

多次元配列を宣言した次元数よりも少ない添え字だけを指定した場合はポインタになることを説明しました。
例えば
int ary[4][2][3];
と3次元配列を宣言したところで、
ary[i]と書くとintが2x3個ならんだ2次元配列を指すポインタになり、ary[i][j]と書くとintが3個ならんだ1次元配列を指すポインタになるということです。
もちろん
ary[i][j][k]と全ての添え字を指定すると、ポインタではなくintになります。

 

3次元配列を関数の引数として渡す時、
例えば
int func(int ary[][2][3], int size);
のように書けますが、最初の仮引数はintの3次元配列のように表記していますが、intが2x3個ならんだ2次元配列を指すポインタの意味になります。
そのことを明示的に書くならば、
int func(int (*ary)[2][3], int size);
となります。
int func(int *ary[2][3], int size);
と書いてしまうとintへのポインタの2次元配列になってしまうので意味が違ってきます。

 

ついに関数ポインタに入りました。
関数ポインタ変数の宣言は関数プロトタイプ宣言の関数名のところを(*関数ポインタ名)にすればよいこと、関数ポインタに関数をセットした後で呼び出すには(*関数ポインタ名)(実引数)でもよいし関数ポインタ名(実引数)でもよいこと、関数ポインタのご利益をqsort関数を使う例題で説明しました。

 

次回は関数ポインタの続きです。

 

先日、C言語勉強会19回目を開催しました。

 

1秒後の時刻を求める関数をTDDで作ってみました。この問題はTDDと相性が良いようでスムーズに進められ効果も感じることができました。今後もっと複雑な事例でも確認したいと思います。

 

もう1つ、久しぶりに3次元配列のメモリ上のデータの並び方を確認する例題をやりました。

 

次回は関数ポインタに入れそうです。