引言
数组是我们初学c语言时的难点之一,这里将对一维数组的基本知识进行讲解
一维数组的创建
1.常量数组的创建
- 基本形式
type(元素类型) arr_name(数组名字)[常量值] = {数据1, 数据2, 数据3……….};
例:
int math[20] = {1,2,3,4};
接下来将对基本形式进行分部分讲解
- type(元素类型)
元素类型指的是在数组中存储的元素类型,如例子中的‘int就指的是数组中存的数据是整数类型,其他的以此类推
- 数组名字
虽然这个看起来没什么好讲的,但是有些数组名是不建议取的,有些甚至是不能取的,因为主播在这里也踩过坑
这里附上一张图:

- 常量值
指的是数组包含的元素个数
这里可以是准确的整数,如1,3,5……. 也可以是定义了的常量数,如(#define a 10)
但不可以是变量(在不支持C99的情况下),如(int a = 10),如果使用a做常量值编译器则会报错
- 初始化
例子中的为不完全初始化,没有初始化的部分会自动初始化为’0′,常量值有多少个就可以初始化多少个元素,记得一定不要超出可初始化的数量!这样会造成数组越界
2.变长数组(变量数组)的创建(涉及指针)
变长数组的创建有两种方式,一种是直接在常量值的位置中填入变量值,但要求满足C99环境
这里我们主要讲解最常见的变长数组的创建方式:指针+malloc创建
- 基本形式
type(指针类型)* arr_name(数组名) = (type*)malloc(元素个数*sizeof(type));
例:
int* arr = (int)malloc(5*sizeof(int));
如果想修改变量数量:
arr = (int*)realloc(arr, 8*sizeof(int));
- 原理
通过指针的学习,我们可以得出一级指针其实可以看作一维数组,两者可以互相转换,因此可以采用 ‘malloc’ 和 ‘realloc’ 函数进行对指针的初始化和扩容,从而实现对元素数量的修改
后面的初始化跟常数一维数组是一样的,不过多赘述
如何访问一维数组中的元素
- 如何读取元素
读取元素我们要先了解一维数组的下标分布,如图:

我们可以清楚的知道,下标是从0开始的,而不是从1开始的,因此我们可以推出我们在初始化一维数组时,初始化了10个元素,但是我们的下标最多只能到9,越界访问则会报错
下面我们就可以学习如何读取元素了
打印: printf(“元素类型”, arr[下标]); 赋值: int a = arr[下标];………………
我们可以总结得到,最重要的就是要写对下标!
- 写(修改)数组元素
在之前的学习中,我们使用scanf此类函数修改变量时,要传地址,但在后面的指针学习中,我们可以将数组名看作数组首元素的地址,所以会出现这种写法:
scanf(“%s”, arr);
看似没有加上传地址符号,但是数组名本身就是数组首元素的地址,所以这里仍然可以正常运行
但是我们要注意的是,如果我们写的是数组名加下标,例如arr[2],这里就是元素了,而不是地址,是不能直接使用的,还是要加上取地址(&)符号!
一般这种用法会使用在字符串的输入,用在其他的输入不太合适
- 打印元素的地址
没什么太多说的,直接给一个公式:
printf(“%p”, &arr[下标];
计算数组元素个数
公式:
int n = sizeof(元素名) / sizeof(首元素);
这里的原理是利用整个元素的大小(这里的元素名代表的是整个数组)除以首元素的大小,就可以求出整个数组元素的个数
例: int n = sizeof(arr) / sizeof(arr[0]);
加餐:
当我们在学习了函数的传址调用后,我们可能会想在自定义函数中再计算元素个数,但是这样是行不通的,因为传过去的元素名是一个指针,而不是元素本身了,这个时候sizeof(arr)算的是指针大小,而不是数组大小,这里给一个例子:

这里的打印结果不是元素数量,而是恒定的指针地址的大小,为4或8
总结
这些只是数组的冰山一角(其实我也没有掌握很多),等学到指针的知识后,才能将这里的知识更好的串起来学习!!!

评论(0)
暂无评论