一.数组的概念
数组是一组相同类型元素的集合。
注意:
1.数组中存放的数组元素个数大于0;
2.数组中存放的多个数据,类型是相同的。
二.变长数组
1.变长数组的概念
arr[ ],[ ]中一般为常量,但在一些编辑器中,[ ]中可以是变量,我们称这些为变长数组。
变长数组是指可以根据变量指定数组的大小,并不意味着数组的大小可以随意变化,其大小一旦确定,就只能为当时变量的大小。
例如:
#include <stdio.h>
> int main()
> {
> int a = 0;
> scanf(" %d ", &a );
> int arr[a];
> //将每个元素设置为其索引的平方并打印出来
> for(int i = 0; i < n; i++)
> {
> arr[i] = i * i;
> printf(" %d ", arr[i]);
> }
> return 0;
> }
注意:变长数组不能初始化
2.数组的类型
int arr[10]//其类型是int [10]
> int arr[12]//其类型是int [12]
3.一维数组在内存中的存储
一维数组在数组中的存储是按照数组元素的大小以空间的型式连续存放,空间名字就叫做地址。
#include <stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
for (int i = 0; i < 10; i++)
{
printf("%p\n", &arr[i]);
}
return 0;
}
三.数组传参
1.数组在传参的时候,实参可以写数组名,形参只是数组的形式;
2.实参和形参的名字可以一样,也可以不一样;
3.数组在传参时,型参与实参是同一数组;
4.函数在设计时功能应该尽可能单一。
//比如要想利用数组传参实现两个数字相加
> #include <stdio.h>
> int add(int x,int y)
> {
> return x + y;
> }
>
> int main()
> {
> int a = 0;
> int b = 0;
> int sum = add( a , b );
> printf(" %d ", sum );
> return 0;
> }
注意:数组传参时,形参和实参个数要匹配,形参数组的“[ ]”内部可以省略(一维数组),二维数组的行值可以不写,但是列值不行。
四.二维数组
1.二维数组的概念
将一维数组作为数组的元素,这就是二维数组。(如果以二维数组作为元素,这就是三维数组)
2.二维数组初始化
//1.完全初始化
>int arr[2][3] = { 1 , 2, 3 , 4 , 5 , 6 };
>//2.不完全初始化
>int arr[2][3] = { 0 };
>//3.错误初始化
>int arr[1][2] = { 1 , 2 , 3 };
3.
五.数组练习
1.多个字符从两端移动,向中间汇聚
#include <stdio.h>
#include <string.h>
//多个字符从两端移动,向中间汇聚
void Swap(char* str1, char* str2,int x)
{
int left = 0;
int right = x;
while(left <= right)
{
Sleep(1000);
str2[left] = str1[left];
str2[right] = str1[right];
left++;
right--;
printf("%s\n", str2);
}
}
int main()
{
char arr1[] = "Welcome to the world!!!";
char arr2[] = "#######################";
int sz = strlen(arr1) - 1;
Swap(arr1, arr2,sz);
return 0;
}
2.⼆分查找
#include <stdio.h>
//⼆分查找
void Find(int arr[], int m,int k)
{
int left = 0;
int right = m - 1;
int count = 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] == k)
{
printf("找到了,该数字在数组中的下标为:%d\n", mid);
count = 0;
break;
}
else if (arr[mid] > k)
{
right = mid;
}
else
{
left = mid;
}
}
if (count)
{
printf("很遗憾,没有找到该数字\n");
}
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = 0;
printf("请输入你要寻找的数字\n");
scanf("%d", &ret);
Find(arr, sz, ret);
return 0;
}