数组

数组

数组是让你批量创建一组相同类型的变量。



1.初始化数组

使用数组前必须先初始化它,与普通变量类似,在使用数组元素之前,必须先给它们赋初值。编译器使用的值是内存相应位置上的现有值。
初始化列表中的项数应与数组的大小一致,当初始化列表中的值少于数组元素个数时,编译器会把剩余的元素都初始化为0.也就是说,如果不初始化数组,数组元素和未初始化的普通变量一样,其中储存的都是垃圾值;但是,如果部分初始化数组,剩余的元素就会初始化为0。
如果初始化列表的项数多于数组元素个数,编译器可没那么仁慈,它会毫不留情地将其视为错误。但是,没必要因此嘲笑编译器。其实,可以省略方括号中的数字,让编译器自动匹配数组大小和初始化列表中的项数。
创建数组时,方括号里的内容只能是常量,不能是变量。
在C89标准中,创建数组时,[ ]中写的数字,必须是“常量”。
在C99标准中,是允许[ ]使用变量的

int n = 10;
int arr[n];

C语言中常量的表示形式:
1、字面值 10
2、const修饰
3、 enum枚举
4、#define宏
初始化实例:
代码如下(示例):

int arr1[10] = {1,2,3};
int arr2[] = {1,2,3,4};
int arr3[5] = {12345}char arr4[3] = {'a',98, 'c'};
char arr5[] = {'a','b','c'};
char arr6[] = "abcdef";

2.数组的使用

在使用数组时,要防止数组下标超出边界。
在C语言中,针对数组取下标操作,千万不能越界,一旦越界之后,产生的效果,称为“未定义行为”,运行结果不可预期(可能程序会读出一个错误的值,可能程序会读出一个看起来“正确”的值,也可能程序会直接崩溃,甚至可能系统直接死机…)具体是以哪种结果出现,取决于操作系统,也取决于编译器,也取决于运行环境…。
所以在写代码的时候必须要避免出现未定义行为,代码中的未定义行为一定是BUG。
数组下标越界,本质上是“访问了非法内存”,内存必须是你申请的才能用,不申请的不能随便用。
[ ]操作元素,有两个操作:
读:获取变量的值
写:修改变量的值
一维数组在内存中的存储:
结论,元素都是处在连续的内存空间上。
在这里插入图片描述

3.二维数组

数组的维数可以有很多。但是实际开发中很少使用高维数组。
二维数组的创建:
代码如下(示例):

//数组创建
int arr[3][4];
char arr[3][5];
double arr[2][4];
//数组初始化
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {{1,2},{4,5}};
int arr[][4] = {{2,3},{4,5}}

所谓的二维数组,本质上,也就是一个一维数组。只不过,每个数组元素有是一个一维数组,也习惯上叫做“3行4列”。

int arr[3][4];

这个数组是一个长度为3的一维数组,每个元素又是一个长度为4的一维数组
二维数组在访问下标的时候,需要两个下标,分别表示行的下标和列的下标。

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int arr[3][4] = 
	{{1, 2, 3, 4},
	 {5, 6, 7, 8},
	 {9, 10, 11, 12}
    };
    for(int i = 0;i < 3;i++)
    {
    	for(int j = 0;j < 4;j++)
    	{
    		printf("%d",arr[i][j]);
    	}
    	printf("\n");
    }
    system("pause");
    return 0;
}

4.一个小应用(冒泡排序)

#include<stdio.h>
#include<stdlib.h>
void bubbleSort(int arr[], int size)
{
	for (int bound = 0; bound < size; bound++)
	{
		for (int cur = size - 1; cur>bound; cur--)
		{
			if (arr[cur - 1] > arr[cur])
			{
				int tmp = arr[cur - 1];
				arr[cur - 1] = arr[cur];
				arr[cur] = tmp;
			}
		}
	}
}
int main()
{
	int arr[] = { 9, 5, 2, 7 };
	//按照升序排序
	bubbleSort(arr,sizeof(arr) / sizeof(arr[0]));
	system("pause");
	return 0;
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李憨憨_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值