想要了解数组吗?进来看看(上)

简介: 想要了解数组吗?进来看看(上)

本片博客会从以下几个方面带大家了解一下数组

1.一维数组的创建和初始化;2.一维数组的使用;3.一维数组在内存中的存储

4.二维数组的创建和初始化;5.二维数组的使用;6.二维数组在内存中的存储

7.数组越界;8.数组作为函数参数;


接下来本博主带大家一一领略


一、一维数组的创建和初始化


数组是一组相同类型元素的集合。

数组的创建方式:

type_t   arr_name   [const_n];

// type_t 是指数组的元素类型

//arr_name指数组名

// const_n 是一个常量表达式,用来指定数组的大小

这里我们注意:

C99 标准之前 数组的大小只能是常量表达式

C99 标准中引入了:变长数组的概念,使得数组在创建的时候可以使用变量,但是这样的数组不能初始化

下面就是一个简单数组创建:


1. int arr1[10];
2. char arr1[];


数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。

下面是数组的简单初始化:


1. int arr1[10] = {1,2,3,4,5,6,7,8,9,10};//完全初始化
2. int arr2[10] = { 1,2,3 };//不完全初始化,剩余的元素默认都是0
3. int arr3[10] = { 0 };//不完全初始化,剩余的元素默认都是0
4. int arr4[] = { 0 };//省略数组的大小,数组必须初始化,数组的大小是根据初始化的内容来确定
5. int arr5[] = { 1,2,3 };
6. char arr1[] = "abc";//一个元素
7. char arr2[] = {'a', 'b', 'c'};//三个元素
8. char arr3[] = { 'a', 98, 'c' };


初始化时一定是需要给一些合理的初始值


int arr6[];//错误初始化


二、一维数组的使用


数组必须先定义,然后使用。C 语言规定,只能逐个引用数组元素,而不能一次引用整个数组。前面讲过,数组元素的表示形式为:

数组名[下标];

下标可以是整型常量或整型表达式,比如:

a[0] = a[5] + a[7] - a[2 * 3];

千万要注意,定义数组时用到的“数组名[常量表达式]”和引用数组元素时用到的“数组名[下标]”是有区别的,定义数组时的常量表达式表示的是数组的长度,而引用数组元素时的下标表示的是元素的编号。比如:

1. arr[5]={1,2,3,4,5}
2. //表示有五个元素,分别存储1,2,3,4,5
3. //下标从0开始,到你所定义的数组长度-1结束,此处是5;
4. //a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5;

关于数组在scanf()与printf()中的使用,一般借助for语句

1. int i = 0;
2. int arr[5] = {1,2,3,4,5};
3. for(i = 0;i<5;i++)
4. {
5.     scanf("%d",&arr[i]);
6. }
7. for(i = 0;i<5;i++)
8. {
9.     printf("%d",arr[i]);
10. }


这里注意:由于在使用时表示的时元素的编号,所在输入时要加上&


三、一维数组在内存中的存储


数组在内存中的存储是连续的,我们写一个代码给大家看一下就明白了


1. int main()
2. {
3.  int arr[10] = { 1,2,3,4,5 };
4.  int sz = sizeof(arr) / sizeof(arr[0]);
5.  int i = 0;
6.  for (i = 0; i < sz; i++)
7.  {
8.    printf("&arr[%d] = %p\n", i, &arr[i]);
9.  }
10. 
11.   return 0;
12. }

这时候我们运行一下

打印坐标后我们发现每个坐标中间相差4,那是因为我们这里用的是int,所以占4个字节

仔细观察输出的结果,可知随着数组下标的增长,元素的地址,也在有规律的递增。 由此可以得

出结论:数组在内存中是连续存放的

 

总结:

  1. 数组在内存中开辟是线性连续且递增的。
  2. 在c语言中,任何变量(基本变量,指针变量,结构体变量,数组变量)的空间都是整体开辟,但任何元素的起始地址一定是开辟字节当中最小的。


四、二维数组的创建和初始化


二维数组的创建

1. //数组创建
2. int arr[3][4];//[行数][列数]
3. char arr[][5];
4. double arr[2][4];

二位数组的初始化

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

注意:

花括号中的一个花括号代表一个一维数组的初始化。当里面无花括号分组时,按照顺序从第一个开始逐个进行初始化。余下的未赋值的元素用0初始化


五、二维数组的使用


二维数组的使用也是通过下标的方式,用双重循环嵌套进行索引使用。 看代码:

1. #include <stdio.h>
2. int main()
3. {
4.  int arr[3][4] = { 0 };
5.  int i = 0;
6.  for (i = 0; i < 3; i++)
7.  {
8.    int j = 0;
9.    for (j = 0; j < 4; j++)
10.     {
11.       arr[i][j] = i * 4 + j;
12.     }
13.   }
14.   for (i = 0; i < 3; i++)
15.   {
16.     int j = 0;
17.     for (j = 0; j < 4; j++)
18.     {
19.       printf("%d ", arr[i][j]);
20.     }
21.   }
22.   return 0;
23. }
相关文章
|
6月前
|
存储 数据可视化 C语言
C 语言数组教程:定义、访问、修改、循环遍历及多维数组解析
数组用于将多个值存储在单个变量中,而不是为每个值声明单独的变量。 要创建数组,请定义数据类型(例如 int)并指定数组名称,后面跟着方括号 []。 要将值插入其中,请使用逗号分隔的列表,并在花括号内使用
1121 0
|
开发框架 .NET C#
c#数组补充
c#数组的几个简单的补充
42 0
|
5月前
|
存储 数据库
【随手记】顺序I/O和随机I/O的定义和区别
【随手记】顺序I/O和随机I/O的定义和区别
157 1
|
6月前
|
存储 C++
定义一堆数组
定义一堆数组
75 1
|
前端开发
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序4
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序4
43 0
|
前端开发
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序2
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序2
55 0
|
前端开发
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序3
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序3
54 0
|
前端开发
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序1
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序1
44 0
|
存储 编译器 C语言
想要了解数组吗?进来看看(下)
想要了解数组吗?进来看看(下)
|
前端开发
前端学习案例11-数组遍历方法3-修改this指向
前端学习案例11-数组遍历方法3-修改this指向
76 0
前端学习案例11-数组遍历方法3-修改this指向