对于数组的理解

什么是数组:数组是一组相同类型元素的集合。数组有什么用呐?以后遇到大量相同类型的元素,单个创建是很麻烦的,就可以用数组来解决。


一维数组

  • 创建数组和初始化

 数组中元素的类型         数组名字         数组中元素个数[ ] 

[ ] 里边是常量或者常量的表达式,创建的时候也可以不填,让电脑自己数元素的个数。

这里有一个注意:c99之前没有[ ] 中不能写变量,c99之后数组的大小可以是变量了,为了支持b变长数组,这里可以通过修改n的大小来指定数组arr的大小。这里会有争议,有一部分编译器不支持变长数组,visual studio 2019就不支持。

int n = 0;
scanf("%d", &n);
int arr[n];

数组的初始化分4种

  1. {1,2,3,4}单个数字的初始化
  2. {’a','b','c','d'}单个字符的初始化
  3. “abcd”字符串的初始化
  4. 有规律元素的,通过for循环初始化
  • 数组的结构

[ ] 这个符号叫下标引用操作符,有了这个符号编译器才能识别为数组。

数组的每一个元素在内存中是有序排列的,并且每一个元素对应一个地址

二维数组

  • 创建和初始化

数组中元素的类型         数组名字         数组中行的元素个数[ ]        数组中列的元素个数[ ] 

为了方便自己理解,这把二维数组的[ ][ ]理解成行和列,但实际二维数组同一维数组一样,在内存中是连续排列的,后文将会介绍。

大括号中用大括号来安排元素的行和列,未安排的位置,编译器会自己默认初始化为0元素

二维数组的结构

二维数组的行和列都同样是从0开始数的;

数组越界,数组与函数

  • 越界

数组的下标从0开始,最后一个元素下标为n-1,访问数组时超过数组下标的访问就会访问到其他程序的内存部分,就叫越界。越界编译器也不一定会报错,但是程序是错误的。

  • 数组与函数

数组在传参时写的是数组名,函数在接受参数时可以写成arr[ ],本质上传的是数组的首元素地址,所以也可以写成*arr,用一个指针变量来接收。

以冒泡排序(升序)的例子来说明数组传参

冒泡排序的思想:

1、对相邻两个元素比较后进行交换

2、对每个元素完成交换的趟数

//冒泡排序算法
void bubble_sort(int arr[], int sz)
{
	for (int i = 0; i < sz -1; i++)
	{
		int temp = 0;
		for (int j = 0; j <sz -1-i ; j++)
		{
			if (arr[j] > arr[j+1])
			{
				temp = arr[j+1];
				arr[j + 1] = arr[j];
				arr[j] = temp;
			}
		}
	}
}
int main()
{
	int arr[] = {99,8,7,65,5,4,3,2,12,0};
	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;
}

数组名的理解

一维数组名的理解

数组名表示数组中首元素的地址,有两个例外:sizeof(数组名),这里的数组名表示的是整个数组,计算的是整个数组的大小,单位是字节。&(数组名),这是数组名表示整个数组,取出的是整个数组的地址。

二维数组名的理解

二维数组也是类比一维数组,同样数组名表示的是首元素的地址,只是在二维数组中首元素是第一行,同样有两个例外。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值