#数组详解#通俗易懂#巩固知识#基础必会

目录

1.一维数组

1.1数组的定义

1.2数组的初始化

1.3一维数组的程序举例

1.4数组越界访问

1.5一维数组在内存中的存储

2.二维数组

2.1二维数组的定义

2.2二维数组的初始化

2.3二维数组在内存中的存储

2.4二维数组的程序举例

3冒泡排序


1.一维数组

1.1数组的定义

数据类型符 数组变量名[整型常量表达式]

例如: int arr[10];  //定义一个整形数组,数组名为arr,此数组包含10个整形元素

注意:

(1)数组有10个元素,但是下标从0开始,不存在数组元素arr[10]

(2)常量表达式包括常量和符号常量,例如char str[8]和float f[5+3]是合法的,但int n;

int arr2[n]或者int count=10;int arr3[count]是不合法的

这种不合法性取决于C99标准前后,在C99标准后支持了变长数组的概念,数组大小可以使用变量指定,但数组不能初始化。

(3)定义数组用到的“数组名[常量表达式]”和引用数组元素时用的“数组名[下标]”形式相同但含义不同

int arr[10];//这是定义数组,指定数组包含10个整形元素
int num=arr[6];//这里的arr[6]表示引用数组arr中下标为6的元素

1.2数组的初始化

初始化:创建数组的同时给它一些值

	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//完全初始化
	int arr2[10] = { 1,2,3 };//不完全初始化,剩余的元素默认初始化为0
    int arr3[] = { 1,2,3,4,5,6,7,8,9,10 };//这里没有指定数组元素个数,编译会根据初始化的内容来确定数组的元素个数

	int arr4[] = { 1,2,3 };//3个元素
    int arr5[10] = { 1,2,3 };//10个元素

	char arr6[3] = { 'a', 'b', 'c' };//三个元素,分别为a,b,c
    char arr7[10] = "abc";//十个元素,前三个为abc,后面都为\0

	char arr8[] = "abc";//四个元素,前三个为abc,最后一个为\0
	char arr9[] = { 'a', 'b', 'c' };//三个元素,分别为a,b,c

特别注意:打印数组的时候遇到"\0"停止,因为arr1是字符串后面自动带上"\0",打印结果不带上"\0",因为arr2的五个元素分别为f,i,n,a,l.无结束标识符,打印随机值。

1.3一维数组的程序举例

   以下是两者不同方式打印数组元素的值

      

 知识总结:

sz=sizeof(arr)/sizeof(arr[0]);//求整形数组元素个数
int* p=arr=&arr[0];//arr表示数组首元素地址,与&arr[0]等价

1.4数组越界访问

在顺序和逆序打印中因为一不小心就容易出现越界访问情况

定义数组有10个元素,下标从0开始,最后一个元素下标为9,上图打印arr[10],越界访问

程序可能会报错可能不报错,但不妨碍这种写法不对。

1.5一维数组在内存中的存储

 总结:1一维数组在内存中是连续存放的

            2随着数组下标的增长,地址是由低到高变化的

2.二维数组

2.1二维数组的定义

类型说明符 数组名 [常量表达式][常量表达式]

例如:int arr[3][4]//定义一个整形二维数组arr,arr为三行四列的数组

2.2二维数组的初始化

int main()
{
	int arr1[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };//完全初始化
	int arr2[3][4] = { 1,2,3,4,5 };
    //不加分括号,不完全初始化,没有初始化的元素系统自动补0
    //arr2可以简单理解为1 2 3 4
                       5 0 0 0
                       0 0 0 0
	int arr3[3][4] = { {1,2} ,{3,4}, {5,6} };//加分括号的定义
    //二维数组的行是可以省略的,但是列不能够省略
    int arr4[][2]={1,2,3,4,5,6,7,8,9};
}

2.3二维数组在内存中的存储

 总结:1二位数组在内存中也是连续存放的

            2因为在内存中连续存放所以可以用指针的形式打印

           3这也使得二维数组可以被看成一种特殊的一维数组:它的元素又是一个一维数组。例如arr[3][4],可以把arr看做一个一维数组,它有三个元素:arr[0],arr[1],arr[2]。每个元素又是一个包含4个元素的一维数组

arr[0]------------arr[0][0] arr[0][1] arr[0][2] arr[0][3]
arr[1]------------arr[1][0] arr[1][1] arr[1][2] arr[1][3]
arr[2]------------arr[2][0] arr[2][1] arr[2][2] arr[2][3]

可以把arr[0],arr[1],arr[2],arr[3]看做一维数组名

2.4二维数组的程序举例

三种打印二维数组的方式如图

3冒泡排序

#include<stdio.h>
int main()
{
	int arr[10] = { 5,2,6,8,1,9,0,3,4,7 };//定义一个整形数组
	int sz = sizeof(arr) / sizeof(arr[0]);//求数组个数
	int i = 0;
	for (i = 0; i < sz - 1; i++)//主循环确定要循环的趟数,10个元素进行9趟,所以sz-1;
	{
		//一趟冒泡排序要进行多少次相邻数据的比较
		int j,tmp = 0;
		for (j = 0; j < sz - 1 - i; j++)//10个元素第1趟比较9组相邻数,第二趟比较8组相邻数,以此类推
		{
			if (arr[j] > arr[j + 1])//交换数据使较大数往后排
			{
				tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j+ 1] = tmp;
			}
		}
	}
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值