ちゃんとした配列
自分で C を使ってプログラミングをしていると、配列の長さを越えてアクセスしてエラーを出すことがある。
これは自分がヘボなせいもあるが、C での配列がちゃんとした配列ではないせいもあるのではないか!? とも考えてもいる。
どこがまずいかというと、配列に「配列の長さ」の情報が含まれておらず、単なるポインタとして扱われてしまうところだと思う。
それを解消した構造体を書いてみる。
typedef struct _KTIntArray { int *array; unsigned int length; } *KTIntArray;
(他の型とぶつからないように "KT" を付けてみた。)
しかし、これを型ごとに全て書くのは面倒だな。C++ のテンプレートが出てきた理由を実感。
車輪の再発明だと分かりながらも(苦笑)、一応、関数も書いてみる。
KTIntArray *KTIntArrayConcatenate(*KTIntArray formerArray, *KTIntArray lattarArray){ KTIntArray *returnArray; unsigned int count, length; length = formerArray->length + latterArray->length; returnArray->array = (int *)malloc((length) * sizeof(int)); returnArray->length = length; for (count = 0; count < formerArray->length; count++) { returnArray->array[count] = formerArray->array[count]; } for (; count < length; count++) { returnArray->array[count] = latterArray->array[count]; } return returnArray; }
まだまだ稚拙なソースなんだろうけれど、ちょこちょこ書いて腕を上げていきたい。