1.数组的定义
数组是一组相同类型元素的集合。
数组的创建方式:元素类型 数组名[一个常量表达式,用来指定数组的大小] ,int arr[10]
注意:[ ]中必须是常量,不能使用变量
2.一维数组的创建及初始化
#include<stdio.h>
#include<string.h>
int main()
{
//创建一个数组
int arr1[10];
//初始化
int arr[10] = { 1,2,3 };//不完全初始化,剩下的元素默认初始化为0
char arr2[5] = { 'a',98 };
char arr3[5] = "ab";
char arr4[] = "abcdef";
printf("%d\n", sizeof(arr4)); 7
//sizeof 计算 arr4所占空间的大小,7个元素-char 7*1=7,sizeof计算变量、数组、类型的大小-单位是字节
//strlen 计算 arr4字符串长度-\0之前的字符个数
printf("%d\n", strlen(arr4)); 6
return 0;
}
3.一维数组的使用
数组是使用下标来访问的,下标是从0开始。
数组的大小可以通过计算得到。
一维数组在内存中的存储 ,数组在内存中是连续存放的。下面是举的例子
#include<stdio.h>
int main()
{
char arr[] = "abcdef";
int i = 0;
for (i = 0; i < 6; i++)
{
printf("%c", arr[i]);
}
return 0;
}
#include<stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("&arr[%d]=%p\n", &arr[i]);
}
return 0;
}
4.二维数组的创建及初始化
二维数组的初始化只能省略行,不能省略列,int arr1[ ] [ ]
#include<stdio.h>
int main()
{
int arr[3][4] = { {1,2,3},{4,5} };
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 4; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
//char arr[][6] = { {1,2,3,4},{5,6,7,8} };
return 0;
}
二维数组在内存中也是连续存储的
#include<stdio.h>
int main()
{
int arr[3][4] = { {1,2,3},{4,5} };
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 4; j++)
{
printf("&arr[%d][%d]=%p\n", i, j, &arr[i][j]);
}
}
return 0;
}
5.数组的两个经典例题(冒泡排序与找出数组中的单身狗)
1.冒泡排序
1)sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组
2)&数组名,取出的是数组的地址。&数组名,数组名表示整个数组
除以上情况外,所有的数组名都表示数组首元素的地址
//数组作为函数参数
void bubble_sort(int arr[],int sz)//参数接受数组元素个数
{
//确定冒泡排序的趟数
int i = 0;
for (i=0; i < sz - 1; i++)
{
int flag = 1;//假设这一趟要排序的数组已经有序
//每一趟冒泡排序
int j = 0;
for (j = 0; j < sz - 1; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0;//本趟冒泡排序的数字无序
}
}
if (flag == 1)
{
break;
}
}
}
int main()
{
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
//对arr进行排序,排成升序
//arr是数组,我们对数组arr进行传参,实际上是传递过去的是数组arr首元素的地址 &arr[0]
bubble_sort(arr,sz);
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
2.找出数组中的单身狗,出现一次的数组元素称为单身狗,例 int arr[ ]={1,2,2,1,3,4,4,7,8,8,7},单身狗就为3
#include<stdio.h>
int main()
{
int arr[] = { 1,1,2,2,3,3,4,4,5,5,6,6,7 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
int count = 0;
int j = 0;
for (j = 0; j < sz; j++)
{
if (arr[j] == arr[i])
{
count++;
}
}
if (count == 1)
{
printf("单身狗:%d\n", arr[i]);
break;
}
}
return 0;
}