首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C语言、数组

C语言、数组

原创
作者头像
xieliyu
发布于 2026-09-20 21:46:44
发布于 2026-09-20 21:46:44
1050
举报
文章被收录于专栏:C语言C语言

        今天我们直接扒光数组的裤底。

什么是数组呢?

        数组主要分为一维数组和多维数组,其中二维数组是最常见的多维数组形式。

        数组:数组是⼀组相同类型元素的集合;数组中存放的个数是1个或者多个相同类型元素,但是数组的元素个数不能为0。

        给大家讲一个例子:

        如果你要存 100 个女朋友的名字(假设你有),你是要定义 gf1, gf2... gf100 吗?

        不,你会被累死。

        这时候数组就像一个“后宫管理系统”,让这个系统来帮你整齐排列......(此处省略500字吐槽)。

   一维数组的创建:

代码语言:cpp
复制
#include<stdio.h>int main(){int arr[10];return 0;}

一维数组基本语法形式:元素类型+数组名字+[数组里面元素个数]。

比如我们现在像存储20个学生的数学成绩:

 int math[10];

当然我们也可以根据需要创建其他类型和⼤⼩的数组:

char ch [10];

double[10];

 数组的初始化:

        数组一般用花括号将数据放在里面。

        当然数组又分为完全初始化和部分初始化。

代码语言:cpp
复制
#include<stdio.h>int main(){int arr[10]={1,2,3,4,5,6,7,8,9,10};int arr1[10]={1,2,3,4,5,6};return 0;}

        注意:不能直接写arr = {90,85,60};(赋值语句不允许这么干,C 语言的 “小脾气”,得顺着来)。

数组的类型:

 去掉数组名就是数组的类型,例如:

1.int arr[10];-->int [10]

2.double arr1[10];-->double [10]

3.char arr[10];-->char[10]

一维数组的使用:

        C语言规定数组是有小标的,下标从0开始,假设有n个元素,起始下标为0,最后一个元素的下标为n-1。下标就相当于一个元素的编号。

        在C语⾔中数组的访问提供了⼀个操作符 [] ,这个操作符叫:下标引⽤操作符。

        有了下标引用操作符我们就能够访问我们想要我元素了,比如我们要访问下标为7的元素,并将访问的元素给打印出来。

代码语言:cpp
复制
#include<stdio.h>int main(){int arr[10]={1,2,3,4,5,6,7,8,9,10};printf("%d\n",arr[7];return 0;}

数组元素的打印:

        打印出我们的元素就要用到我们之前讲到的循环。

代码语言:cpp
复制
#include<stdio.h>int main(){int arr[10]={1,2,3,4,5,6,7,8,9,10};int i =0;for(i=0;i<10;i++)    {printf("%d ",arr[i]);    }return 0;}

 数组的输入:

代码语言:cpp
复制
#include<stdio.h>int main(){int arr[10]={0};int i =0;for(i=0;i<10;i++)    {scanf("%d",&arr[i]);    }for(i=0;i<10;i++)    {printf("%d ",arr[i]);    }return 0;}

⼀维数组在内存中的存储:

代码语言:cpp
复制
#include<stdio.h>int main(){int arr[10]={1,2,3,4,5,6,7,8,9,10};int i =0;for(i=0;i<10;i++)    {printf("&arr[%d] = %p ",i,&arr[i]);    }return 0;}

        从结果我们可以知道数组是由小到大变化的,每次增加4个字节,因为一个整型的大小就是4个字节,每个相邻元素之间的差值就是4个字节。

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

        当我们不知道这个数组到底有多少个个数的时候我们可以用一个关键字来计算。

sizeof:

代码语言:cpp
复制
#include <stdio.h>int main(){int arr[10] = {0};printf("%d\n", sizeof(arr[0]));printf("%d\n", sizeof(arr));printf("%d\n", sizeof(arr)/sizeof(arr[0]));return 0;}

        以后在代码中需要数组元素个数的地⽅就不⽤固定写死了,使⽤上⾯的计算,不管数组怎么变化,计算出的大小也就随着变化了。

二维数组:

        如果你觉得一维数组是 “一条长长的走廊”,那二维数组就是 ——走廊旁边还有好多走廊,而且它们都长得一模一样。听起来像某种建筑噩梦?对,这就是 C 语言程序员每天的日常。

        二维数组的本质其实很朴素:数组的数组。你可以把它想象成一张表格、一个 Excel 、一个教室座位表,或者是你小时候画的那种 “寻宝地图”。它用两个下标来定位:a[i][j] 就表示第 i 行第 j 列的那个格子。简单、直观、但也容易让你怀疑人生。

        当然也有学过 线性代数 里面的矩阵这个概念,就相当于在这个二维数组中有n行m列个元素,数组就可以用矩阵来理解。

二维数组的语法形式:

代码语言:cpp
复制
#include<stdio.h>int main(){int arr[n][m];double arr1[n][m];return 0;}

语法形式:类型+数组名字+[n][m]元素个数(有n行m列个元素)。

⼆维数组的初始化:

代码语言:cpp
复制
#include<stdio.h>int main(){    int arr1[2][3]={1,2};int arr2[2][3]={1,2,3,4,5,6};int arr3[2][3]={ {1 ,2,3},{3,4,5} };return 0;}

        注意:初始化时省略⾏,但是不能省略列。

⼆维数组的使⽤:

        二维数组也是采用下标形式来访问的。二维数组是有行与列的,只要锁定了行与列就能精准锁定二维数组中的任意一个元素。

代码语言:cpp
复制
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

        当我们想要访问数组中7的时候,并将7给打印在屏幕上面。方法如下:

代码语言:cpp
复制
#include<stdio.h>int main(){int arr[3][5]={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};printf("%d\n",arr[2][4]);return 0;}

二维数组的输入和输出:

代码语言:cpp
复制
#include<stdio.h>int main(){int arr[3][5]={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};int i =0;for(i=0;i<3;i++)    {int j =0;for(j=0;j<5;j++)        {scanf("%d",&arr[i][j]);        }    }for(i=0;i<3;i++)    {int j =0;for(j=0;j<5;j++)        {printf("%d ",arr[i][j]);        }printf("\n");    }return 0;}

        输入结果与输出结果:

⼆维数组在内存中的存储:

           从输出结果来看,我们的二维数组在内存中存放也是连续的。每两个元素之间的差值都是4个字节。

        我们可以将二维数组理解成多个相同元素类型的一维数组组成的集合体。

C99中的变⻓数组:

        在C99标准之前,C语⾔在创建数组的时候,数组大小的指定只能使⽤常量、常量表达式,或者如果我 们初始化数据的话,可以省略数组大小。

        只用之前介绍的数组创建形式就不够灵活。有时候大了浪费空间,小了又不够用。那么就有了我们的变长数组。

        C99中给⼀个变⻓数组(variable-lengtharray,简称VLA)的新特性,允许我们可以使⽤变量指定 数组⼤⼩。

        数组 arr 就是变⻓数组,因为它的⻓度取决于变量 n 的值, 编译器 没法事先确定,只 有运⾏时才能知道 n 是多少。 变⻓数组的根本特征,就是数组⻓度只有运⾏时才能确定,所以变⻓数组不能初始化。有的编译器是不支持变长数组的。

代码语言:cpp
复制
#include <stdio.h>int main(){int n = 0;scanf("%d", &n);int arr[n];int i = 0;for (i = 0; i < n; i++)    {scanf("%d", &arr[i]);    }for (i = 0; i < n; i++)            {printf("%d ", arr[i]);            }return 0;}

        给n中输入5:

        好了说到这里相信大家对数组有更加清楚的认识了。

        谢谢大家!!!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档