1. 数组的概念
2. ⼀维数组的创建和初始化
3. ⼀维数组的使用
上面的代码大家可以自行练习一下。
4. ⼀维数组在内存中的存储
如果我们要深入了解数组,我们最好能了解⼀下数组在内存中的存储。
依次打印数组元素的地址:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
for(i=0; i<10; i++)
{
printf("&arr[%d] = %p\n ", i, &arr[i]);
}
system("pause");
return 0;
}
从输出的结果我们分析,数组随着下标的增长,地址是由小到大变化的,并且我们发现每两个相邻的元素之间相差4(因为⼀个整型是4个字节)。
所以我们得出结论:数组在内存中是连续存放的。
数组元素在内存中是连续存放的
5. sizeof计算数组元素个数
如何知道数组元素的个数呢?
属于sizeof。
6. 二维数组的创建
整型、整型⼀维数组、整型⼆维数组
7. 二维数组的初始化
8. 二维数组的使用
二维数组访问也是使用下标的形式的,二维数组是有行和列的,只要锁定了行和列就能唯⼀锁定 数组中的一个元素。
C语言规定,二维数组的行是从0开始的,列也是从0开始的。
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
图中最右侧绿色的数字表示行号,第一行蓝色的数字表示列号,都是从0开始的,
比如:第2行第4列是7;
#include <stdio.h>
#include<stdlib.h>
int main()
{
int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };
printf("%d\n", arr[2][4]);
system("pause");
return 0;
}
9. 二维数组在内存中的存储
如果想研究二维数组在内存中的存储方式,我们也是可以打印出数组所有元素的地址的。
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[3][5] = { 0 };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
}
}
system("pause");
return 0;
}
从输出的结果来看,每⼀行内部的每个元素都是相邻的,地址之间相差4个字节,跨行位置处的两个元素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以二维数组中的每个元素都是连续存放的。
二维数组的每⼀行在内存中连续存放
10. C99中的变长数组
11. 数组练习
练习1 :多个字符从两端移动,向中间汇聚
#include<stdio.h>
#include<stdilib.h>
int main()
{
char arr1[] = "welcome to bit!!!!!!!";
char arr2[] = "*********************";
printf("%s",arr2);
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
Sleep(1000);//休眠,单位是毫秒
system("cls");//用来执行系统命令的
left++;
right--;
printf("%s\n", arr2);
}
printf("%s\n", arr2);
system("pause");
return 0;
}
练习2:二分查找
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
// 0,1,2,3,4,5,6,7,8,9
int sz = sizeof(arr) / sizeof(arr[0]);
int i=0;
int find = 0;
int left = 0;
int right = sz - 1;
int t=0;
int mid;
scanf_s("%d",&t);
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] < t)
{
left = mid + 1;
}
else if (arr[mid] > t)
{
right = mid - 1;
}
else
{
printf("找到了,下标是%d\n", mid);
find = 1;
break;
}
}
if (find == 0)
{
printf("找不到了\n");
}
system("pause");
return 0;
}
完!
有什么不懂的地方或者不完整的地方可以私信或者评论区告诉我哦。