本部分包含一维二维数组的创建和初始化、以及在内存中的存储形式,数组作为函数参数。
本部分练习题:冒泡排序。
笔记:
- 数组
- 5.1 概述
- 所谓数组,就是一个集合,里面存放了相同类型的数据元素
- 特点1:数组中的每个数据元素都是相同的数据类型
- 特点2:数组是由连续的内存位置组成的
- 例图:
- 5.2 一维数组
- 5.2.1 一维数组定义方式
- 一维数组定义的三种方式:
- 数据类型 数组名[ 数组长度 ];
- 数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};
- 数据类型 数组名[ ] = { 值1,值2 ...};
- 图示:
- 注意:如果在初始化数据的时候,没有全部填写完,会用0来填补剩余数据+数组长度必须是常量
- 总结1:数组名的命名规范与变量名命名规范一致,不要和变量重名
- 总结2:数组中下标是从0开始索引
- 一维数组定义的三种方式:
- 5.2.2 一维数组数组名
- 一维数组名称的用途:
- 1.可以统计整个数组在内存中的长度
- 2.可以获取数组在内存中的首地址
- 注意:数组名是常量,因此不可以赋值
- 总结1:直接打印数组名,可以查看数组所占内存的首地址
- 总结2:对数组名进行sizeof,可以获取整个数组占内存空间的大小
- 一维数组名称的用途:
- 5.2.3 冒泡排序
- 作用: 最常用的排序算法,对数组内元素进行排序
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
- 重复以上的步骤,每次比较次数-1,直到不需要比较
- 作用: 最常用的排序算法,对数组内元素进行排序
- 5.2.1 一维数组定义方式
- 5.3 二维数组
- 二维数组就是在一维数组上,多加一个维度。
- 5.3.1 二维数组定义方式
- 二维数组定义的四种方式:
- 数据类型 数组名[ 行数 ][ 列数 ];
- 数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
- 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
- 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
- 建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性
- 总结:在定义二维数组时,如果初始化了数据,可以省略行数
- 二维数组定义的四种方式:
- 5.3.2 二维数组数组名
- 二维数组名称的用途:
- 1.查看二维数组所占内存空间
- 2.获取二维数组首地址
- 二维数组名称的用途:
- 5.4 数组&函数
- 传递数组给函数
- 可以通过指定不带下标(索引)的数组名来传递一个指向数组的指针
- 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址
- 数组作为参数的三种方式
- 1.形式参数是一个指针:void myFunction(int *param)
- 2.形式参数是一个已定义大小的数组:void myFunction(int param[10])
- 3.形式参数是一个未定义大小的数组:void myFunction(int param[])
- 从函数返回数组
- C++ 不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。
- 如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数。
- 例子:int * myFunction()
- 传递数组给函数
- 5.1 概述
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
bubble_sort(int arr[], int len)
{
for (int i = len-1;i>0;i--)
{
for (int j = 0;i>j ;j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
else
{
break;
}
}
}
}
int main()
{
//数组的创建
int arr1[8];
//数组的初始化
int arr2[] = { 1,2,3,4 };
int len = sizeof(arr2) / sizeof(arr2[0]);
char arr3[] = { 'a','c','x','\0' };
char arr4[] = "acx";
//一维数组在内存中的存储
int arr5[] = { 1,2,3,4,5,6,7 };
for (int i = 0;i < 10;i++)
{
printf("arr[%d]的地址是%p\n",i, &arr5[i]);
}
//二维数组的创建
int arr6[2][3];
//二维数组的初始化
int arr7[2][3] = { {1,2,3},{4,5,6} };
//数组作为函数参数
int arr8[] = { 1,2,3,4 };
printf("%p\n", &arr8[0]);
printf("%p\n", arr8);
printf("%p\n", arr8+1);
printf("%p\n", &arr8[1]);
printf("%p\n", &arr8);
printf("%p\n", &arr8+1);
//冒泡排序
int arr[] = { 10,9,8,7,6,5,4,3,2,1 };
int len = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr,len);
for (int i = 0;i < len;i++)
{
printf("%d ", arr[i]);
}
}