- - 配列を0で初期化する方法
- 宣言した要素数よりも指定した初期値が少ないとき,残りの要素は0で初期化される.よって,これを利用することによって,ローカル変数として宣言した配列全体を0で初期化することができる.
プログラム例
- なお,グローバル変数と静的変数は,宣言と同時に初期化される.
- 0以外の値で初期化する場合は,forループを利用する.
プログラム例
int dat [ 5 ];
int i;
for ( i = 0 ; i < 5 ; i++ )
{
dat [ i ] = 100;
} |
プログラム例
int dat [ 2 ] [ 5 ] = { 0 }; |
|
- - 二次元配列の要素へのアクセスは,順序を変えると速度が変わる
- 通常のC/C++言語でメモリ配置上,高速になる二次元配列のアクセスは次のようになる.
プログラム例
for ( i = 0 ; i < 行数 ; i++ )
{
for ( j = 0 ; j < 列数 ; j++ )
{
配列[i][j]に対する処理;
}
}
|
|
- - 配列名は,配列の先頭アドレスを表す定数である
- 値を代入することはできない.
- たとえば,datは配列の先頭アドレスを表している.
|
- - 配列を簡単にコピーする.
- memcpy関数を利用する.
- この関数は,stdio.hまたはmemory.hに定義されている.
- memcpy(コピー先配列名,コピー元配列名,サイズ);
- という書式で実行する.サイズには,コピーする配列のサイズを指定するため,
- のようにsizeof演算子を利用すると便利.
サンプルコード
int src[]={1,2,3,4,5};
int dest[5];
memcpy(dest,src,sizeof(src));
|
|
- - ありえない値を利用して,配列の終わりを表す方法
- 配列の最後を表す値を,配列に代入する値としてはありえない値に決めておけば,int型やfloat型の配列で配列の終端を自動的に判別することができる.
サンプルコード
int dat[]={1,2,3,4,5,-999,6,7,8,9,10};
int i;
i=0;
while(dat[i] != -999)
{
printf("dat[%d] %d\n",i,dat[i]);
i=i+1;
}
|
|
- - 二次元配列を一次元配列で扱う方法
- 行のインデックス=一次元配列のインデックス/二次元配列の列数 の商
列のインデックス=一次元配列のインデックス/二次元配列の列数 の余り
サンプルコード
i = x / jmax;
j = x % jmax + 1;
|
|
- - 構造体の配列を利用する
- 構造体は,データ型の異なる複数のデータをまとめて扱うことができる.
また他のデータ型と同じように,配列を作成することもできる.
サンプルコード
#include <Stdio.h>
int main(void)
{
/* 構造体の宣言 */
struct score {
char name[10];
int kokugo;
int sansu;
int rika;
int shakai;
};
/* 変数の宣言 */
struct score dat[]={
{"太郎",85,60,70,82},
{"花子",62,78,95,80},
{"二郎",70,95,100,63},
{"桃子",75,80,69,92},
{"三郎",100,72,90,90},
};
int i;
int total=0;
for(i=0;i<5;i++)
{
total=dat[i].kokugo+dat[i].sansu+dat[i].rika+data[i].shakai;
}
return 0;
}
|
|
|
|
|
|
|