boxmoe_header_banner_img

糖画99

文章导读

一维数组的基本了解


avatar
mizuki 2025年12月22日 18

引言

数组是我们初学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)

查看评论列表

暂无评论


发表评论

表情 颜文字

插入代码