4.24ノート(配列)

配列は、同じタイプの要素のコレクションです。

 
 
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 []

  1. 通常のchar配列として扱われます。
  2. 全体として文字列として使用されます。

 
 
2. 1次元配列の使用

配列のスペースは、対応する関数のスタックフレーム内で開かれます。つまり、スペースはスタック上で開かれます(通常の状況)。

  1. 配列には、0から始まる添え字を使用してアクセスします。
  2. 配列のサイズを計算できます。
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つの例外:

  1. sizeof(配列名)。
  2. 配列名、配列のアドレスを取り出します。配列名。配列は配列全体を表します。

おすすめ

転載: blog.csdn.net/w903414/article/details/105733178