1.アレイ
C言語は、同じタイプの要素の固定サイズの順次コレクションを格納できる配列データ構造をサポートします。配列は一連のデータを格納するために使用されますが、同じタイプの一連の変数と見なされることがよくあります。
配列内の特定の要素には、インデックスでアクセスできます。
すべてのアレイは、連続したメモリ位置で構成されています。最小アドレスは最初の要素に対応し、最大アドレスは最後の要素に対応します。
1.1配列の宣言
//一维数组,arraySize必须是大于0的整数常量,是数组元素的个数。type是任意的C数据类型。
type arraName[arraySize];
1.2配列の初期化
Cでは、1つずつ初期化するか、初期化ステートメントを使用できます。
例えば:
int a[5]={
1,2,3,4,5}
//{}内的个数不能大于[]中指定的元素数目。
//若没写[]内的数,则数组大小为初始化时元素的个数。
すべての配列は、最初の要素のインデックスとして0を使用します。これは、ベースインデックスとも呼ばれます。配列の最後のインデックスは、配列の合計サイズから1を引いたものです。
1.3配列要素にアクセスする
配列要素には、配列名にインデックスを追加することでアクセスできます。要素のインデックスは、配列名の後に角括弧で囲まれています。
1.4多次元配列
Cは多次元配列をサポートします。多次元配列の最も単純な形式は、2次元配列です。
ステートメントは次のとおりです。
type name[size1][size2]...[sizeN];
2次元配列:
//一个二维数组,在本质上,是一个一维数组的列表
type arrayName [ x ][ y ];
初期化:
括弧内の各行に値を指定することで初期化できます。
int a[3][4] = {
{
0, 1, 2, 3} , /* 初始化索引号为 0 的行 */
{
4, 5, 6, 7} , /* 初始化索引号为 1 的行 */
{
8, 9, 10, 11} /* 初始化索引号为 2 的行 */
};
ネストされた内側の括弧はオプションです。
int a[3][4] = {
0,1,2,3,4,5,6,7,8,9,10,11};
2次元配列の要素には、添え字(つまり、配列の行インデックスと列インデックス)を使用してアクセスします。
1.5配列を関数に渡す
インデックスなしで配列の名前を指定することにより、配列へのポインターを関数に渡すことができます。
1次元配列を関数のパラメーターとして渡す場合は、次の3つの方法で関数の仮パラメーターを宣言する必要があります。これらの3つの宣言メソッドの結果は同じです。これは、各メソッドがコンパイラーに次のように指示するためです。整数ポインタを受け取ります。同様に、多次元配列を仮パラメーターとして渡すこともできます。
方法1:正式なパラメーターはポインターです
void myFunction(int *param)
{
.
.
.
}
方法2:正式なパラメーターは定義されたサイズの配列です
void myFunction(int param[10])
{
.
.
.
}
方法3:正式なパラメーターは未定義のサイズの配列です
void myFunction(int param[])
{
.
.
.
}
1.6関数から配列を返す
Cを使用すると、関数から配列を返すことができます。
C言語では、関数パラメーターとして完全な配列を返すことはできません。ただし、インデックスなしで配列の名前を指定することにより、配列へのポインタを返すことができます。
関数から1次元配列を返す場合は、次のように、ポインターを返す関数を宣言する必要があります。
int * myFunction()
{
.
.
.
}
さらに、Cは、ローカル変数が静的変数として定義されていない限り、関数の外部でローカル変数のアドレスを返すことをサポートしていません。
1.7配列へのポインタ
インデックスなしで配列の名前を指定することにより、配列の最初の要素へのポインターを生成できます。
配列名は、配列の最初の要素への定数ポインターです。