数组:是 一组相同类型元素的集合。
一、一维数组的创建和初始化
创建方法:数组元素类型 数组名 [数组大小];
int n = 10;
int arr[n];
//C99中引入了变长数组的概念,允许数组的大小用变量来指定
//如果编译器不支持c99中的变长数组,那就不能使用,vs2019不支持
初始化:创建数组的同时赋值,有两种方式①、不完全初始化,定义一部分元素后,余下的元素默认为0;②、完全初始化,不可初始化赋值过多
char arr[]={'a','b'};
初始化时,数组大小可以省略,会根据 初始化内容指定大小。
使用:[ ]下标引用操作符,数组的下标从0开始,数组名和数组大小是[ ] 的操作数。
sizeof(arr);//数组总长
sizeof(arr[0]);//单个元素的长
int sz=sizeof(arr)/sizeof(arr[0]);//求元素个数
例题:给数组赋值1~100并打印到屏幕上。
#include<stdio.h>
int main()
{
int arr[100] = { 1,2,3,4 };
int sz = sizeof(arr) / sizeof(arr[0]);
for (int i = 0;i < sz; i++)
{
arr[i] = i + 1;
}
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
一维数组在内存中是连续存放的,随着数组下标的增长,地址是由高到低变化的。
%p用于打印地址(16进制),%d打印整数(10进制)
二、二维数组
创建:数据类型 数组名[ 行数 ] [ 列数 ];
初始化和行列的省略
int arr[3][5]={1,2,3,4,5};//列数不可以省略,
//一行填满后,继续下一行,余下位置为0,可自动找寻行数。
int arr1[][5]={{1,2},{3,4},{5,6}};//行数可以省略,列数不可以省略。
二维数组的访问也是通过[ ]下标引用操作符访问的。
例题:在屏幕上打印一个二维数组。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int arr[3][5] = { {1,2},{3,4},{5,6} };
int i ,j= 0;
for (i = 0; i < 3; i++)//3=sizeof(arr)/sizeof(arr[0])即整个数组大小除以第一行的大小
{
for (j = 0; j < 5; j++)//5=sizeof(arr[0])/sizeof(arr[0][0])
//即第一行大小除以第一行第一个元素的大小
{
arr[i][j];
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
二维数组在内存中也是连续存放的,初始化时行可省略,列不可省略。
三、数组越界
数组下标从0开始,如果有n个元素,最后一个元素的下标就是n-1。如果数组下标小于0或大于n-1,即就是数组越界。越界编译器并不会报错,但会访问到别的地址空间上。
四、数组作为函数参数
冒泡排序思想:数组中两个相邻的元素进行比较,如果不满足顺序,就交换。一个先于其他元素比较,找到正确位置后,下一个再与其他元素比较。10个数据元素排9趟。
例题:写一个冒泡排序的函数,来排序arr数组的内容,升序。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void bubble_sort(int arr[], int sz)
{
//趟数
int i = 0;
for (i = 0; i < sz-1; i++)
{
//每趟冒泡排序的过程
for (int j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int arr[] = { 9,8,7,6,5,4,3,2,1 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
注意:数组名就是数组首元素的地址,但有两个例外:
1>sizeof(数组名),数组名不是首元素的地址,数组名表示整个数组,计算的是整个数组的大小。
2> &数组名,数组名不是首元素的地址,数组名表示整个数组,取出的是整个数组的地址。