dedecms网站空白引流推广
作者:小树苗渴望变成参天大树
作者:认真写好每一篇博客
作者gitee:link
如果你觉得文章对你有帮助, 就支持关注博主,如有不足还还请指点,博主及时改正
数组
- 前言
- 一、一维数组的创建和初始化
- 1.1数组的创建
- 1.2数组的初始化
- 1.3一维数组的使用
- 1.4一维数组在内存中的存储
- 二、二维数组的创建和初始化
- 2.1二维数组的创建
- 2.2二维数组的初始化
- 2.3二维数组的使用
- 2.4二维数组在内存中的存储
- 三、数组越界
- 四. 数组作为函数参数
- 五、总结
前言
Hello,各位友友们,我们又见面了,大家最近有没有努力学习啊,相信你们一定在学习并且收获了很多知识。今天作者又来讲述新的知识点了,关于数组,不知道数组的希望你通过这篇博客,能更好理解数组,知道数组的大佬也希望能知道我的不足。我将从一维和二维两个部分被带大家去接触数组,并且没有特别说明的情况下以整型数组来讲解。那我i们废话不多说,接入正文!!!
一、一维数组的创建和初始化
1.1数组的创建
数组就是一组相同类型元素的集合
数组的创建方式:
type_t arr_name [const_n];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小
我们来举几个例子:
//代码1
int arr1[10];
int arr2[3+7];
//代码2
int count = 10;
int arr3[count];//数组时候可以正常创建?
//代码3
char arr4[10];
float arr5[1];
double arr6[20];
注:数组创建,在C99标准之前, [] 中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念。
代码1和代码3创建都是正确的,但代码3在vs编译器是错误的,在gcc编译器上是正确的。
说明VS编译器不支持C99标准,而gcc编译器支持。
1.2数组的初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。
初始化的原因是避免在使用的时候出现随机值,就跟变量的初始化一样的道理。
让我们看一些正确的代码:
int arr1[10] = {1,2,3};
int arr2[] = {1,2,3,4};
int arr3[5] = {1,2,3,4,5};
char arr4[3] = {'a',98, 'c'};
char arr5[] = {'a','b','c'};
char arr6[] = "abcdef";
arr1里面有10个元素。这是不完全初始化,后面的元素默认为0;
arr2是没有指定元素个数,会根据初始化内容来确定元素个数;
arr3里面有5个元素。这是完全初始化;
arr4是字符数组的完全初始化;
arr5是没有指定元素个数的初始化;
arr6是字符串数组中的没有指定元素个数的初始化,每个位置放一个字符;
来看一下,这6个数组里面倒低放什么元素吧
特别注意arr5和arr6在内存怎么分配的!!!
char arr7[4]=“ab”;"ab"本身里面就有一个\0。这种不完全初始化后面默认的元素是\0.
我们来看一下不初始化带来的后果,我们先不管怎么使用,一会我会讲。如果不初始化,就会像图片中的一样,会出现随机值。所以在使用之前最好初始化一下,避免后期的错误。
1.3一维数组的使用
对于数组的使用我们之前介绍了一个操作符: [] ,下标引用操作符。它其实就数组访问的操作符。
我们来看代码:
#include <stdio.h>
int main()
{int arr[10] = {0};//数组的不完全初始化//计算数组的元素个数int sz = sizeof(arr)/sizeof(arr[0]);//对数组内容赋值,数组是使用下标来访问的,下标从0开始。所以:int i = 0;//做下标for(i=0; i<10; i++)//这里写10,好不好?{arr[i] = i;} //输出数组的内容for(i=0; i<10; ++i){printf("%d ", arr[i]);}return 0;
}
解释:arr这个数组名本身是第一个元素的地址,但在sizeof这个操作符中arr代表整个数组地址,单位是字节。
sz=sizeof(arr)/sizeof (arr[0]);表示整个数组的大小除以每一个元素的大小。通过这种方式就可以计算数组里面有多少元素。
我们可以看出来sz的大小是10。
第一个for循环就是给arr数组的每一个元素进行赋值,第二个for循环就是将arr数组打印出来。
- 数组是使用下标来访问的,下标是从0开始。
- 数组的大小可以通过计算得到。
1.4一维数组在内存中的存储
在内存的存储其实就是看他在内存中的地址,想要看到数据在内存的地址就需要使用到&操作符。那我们接下来看数组在内存中的存储。
#include <stdio.h>
int main()
{int arr[10] = {0};int i = 0;int sz = sizeof(arr)/sizeof(arr[0]);for(i=0; i<sz; ++i){printf("&arr[%d] = %p\n", i, &arr[i]);}return 0;
}<