配列は、同じタイプの要素のコレクションです。
1.アレイの作成
int brr[5] = {
1,2,3,4,5 };
char b[5] = "abcd";
int arr[] = {
1,2,4,5,6,7,8,9 };
char a[] = "abcdefg";
アレイでは、定数が与えられなければならない中央にない変数。書き込むこともできず、要素数は後の初期化の内容で決まります。注:文字列では、末尾にターミネータがあるため、上記の配列のサイズは5です。配列型の2つの使用法:[]
‘\0’
char []
- 通常のchar配列として扱われます。
- 全体として文字列として使用されます。
2. 1次元配列の使用
配列のスペースは、対応する関数のスタックフレーム内で開かれます。つまり、スペースはスタック上で開かれます(通常の状況)。
- 配列には、0から始まる添え字を使用してアクセスします。
- 配列のサイズを計算できます。
int sz = sizeof(arr) / sizeof(arr[0]);
3. 1次元配列のメモリへの格納
int main()
{
int arr[] = {
1,2,4,5,6,7,8,9 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (; i < sz; i++)
{
printf("&arr[%d]=%p\n", i, &arr[i]);
}
return 0;
}
結果は次のとおりです。
添え字要素が増加すると、要素のアドレスが増加し、そのたびに4バイト(int型)増加します。したがって、配列はメモリに継続的に格納されます。
読み取る場合、読み取られるのは開始アドレス、つまり変数の最初のバイトのアドレスです。
4. 2次元配列の作成と初期化
int arr[3][4] = {
1,2,3,4,5 };
char brr[3][5] = {
'a','b','c','d' };
通常、2次元配列int arr[M][N]
ではMは省略できますが、Nは省略できません。
5. 2次元配列の使用
2次元配列も添え字を介して使用されます。
int main()
{
int arr[3][4] = {
0};
char brr[3][5] = {
'a','b','c','d' };
int i = 0;
for (; i < 3; i++)
{
int j = 0;
for (; j < 4; j++)
{
arr[i][j] = i * 6 + j;
printf("%d\t", arr[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
結果は次のとおりです
。6. 2次元配列のメモリへの格納
int main()
{
int arr[3][4] = {
0};
char brr[3][5] = {
'a','b','c','d' };
int i = 0;
for (; i < 3; i++)
{
int j = 0;
for (; j < 4; j++)
{
printf("&arr[%d][%d]=%p\n", i, j, &arr[i][j]);
}
}
return 0;
}
結果は次のとおりです。
2次元配列も直線的かつ継続的に保存されます。
2次元配列は基本的に1次元配列と見なすことができますが、配列にはいくつかの1次元配列が含まれています。
どの配列も線形に連続し、増分的に格納されます。
7.アレイ名
int main()
{
int arr[] = {
1,2,3,4,5 };
printf("%p\n", arr);//首地址
printf("%p\n", &arr);//取出的为数组的地址
printf("%p\n", arr+1);//下一个元素地址
printf("%p\n", &arr+1);//走完整个数组元素,下一个地址
printf("%p\n", arr[1]);//第二个元素的十进制显示
printf("%p\n", &arr[1]);//第二个元素的地址
printf("%p\n", *arr);//首元素的十进制显示
return 0;
}
配列名は通常、配列の最初の要素のアドレスです。
2つの例外:
- sizeof(配列名)。
- 配列名、配列のアドレスを取り出します。配列名。配列は配列全体を表します。