C语言中数组的分类

目录

数组的分类

1.按照元素的类型分类

字符数组:

短整型的数组:

整型的数组:

长整型的数组:

浮点型的数组:

指针数组

       结构体数组

2.按维数分类

一维数组 

二维数组

多维数组

3.数组的定义

一维数组的定义:

二维数组的定义:

4.数组的初始化

4.1一维数组的初始化

 4.2 二维数组的定义并初始化

5.数组元素的引用方法

一维数组元素的引用方法

二维数组元素的引用方法

字符数组

字符数组的初始化

字符串方式的初始化

二维字符数组

字符串方式的二维数组初始化

总结


从0开始记录我的学习历程,我会尽我所能,写出最最大白话的文章,希望能够帮到你,谢谢。


提示:文章作者为初学者,有问题请评论指正,感谢。

数组的分类

1.按照元素的类型分类

  1. 字符数组

    • 字符数组用来存储字符类型的元素,比如文字和字符串。
    • 例子:char name[10] = "Copilot"; 这里 name 就是一个可以存储10个字符的数组。
  2. 短整型的数组

    • 短整型数组用来存储 short int 类型的元素,它比普通的整型占用的内存空间小。
    • 例子:short int ages[5] = {23, 45, 30, 18, 21}; 这里 ages 是一个可以存储5个短整型数的数组。
  3. 整型的数组

    • 整型数组用来存储 int 类型的元素,这是最常见的数组类型。
    • 例子:int scores[3] = {85, 90, 78}; 这里 scores 是一个可以存储3个整数的数组。
  4. 长整型的数组

    • 长整型数组用来存储 long int 类型的元素,它比整型占用的内存空间大。
    • 例子:long int big[2] = {1000000, 2000000}; 这里 big 是一个可以存储2个长整型数的数组。
  5. 浮点型的数组

    • 浮点型数组用来存储小数,分为单精度 float 和双精度 double
    • 例子:float prices[4] = {1.99, 2.99, 3.99, 4.99}; 这里 prices 是一个可以存储4个单精度浮点数的数组。
    • 双精度例子:double weights[3] = {55.5, 60.6, 65.7}; 这里 weights 是一个可以存储3个双精度浮点数的数组。
  6. 指针数组

    • 指针数组用来存储指针,即存储了其他变量地址的变量。
    • 例子:int* ptrs[3]; 这里 ptrs 是一个可以存储3个整型指针的数组。
    • 指针数组,就是一个数组,但它存储的是地址,而不是普通的数据。
    • 例子:假设你有三本书,每本书在图书馆的一个位置。你可以用一个小纸条记录每本书的位置,这三个小纸条放在一起,就形成了一个“指针数组”。

       结构体数组

  1. 结构体数组用来存储结构体类型的元素,结构体是一种自定义的数据类型,可以包含多个不同类型的数据。
  2. 例子:
  3. 结构体数组,是一个数组,里面的每个元素都是一个“包裹”,这个“包裹”可以装很多不同的东西。
    struct Student {
        char name[50];
        int age;
        float score;
    };
    struct Student class[20]; // 这里 `class` 是一个可以存储20个学生信息的结构体数组。
    

  4. 结构体数组,是一个数组,里面的每个元素都是一个“包裹”,这个“包裹”可以装很多不同的东西。
  5. 例子:假设你要记录你的五个朋友的信息,每个朋友都有名字、年龄和电话号码。你可以用一个笔记本,每一页记录一个朋友的所有信息,这个笔记本就像一个“结构体数组”。

2.按维数分类

一维数组 

int a[30]; 就像是一排平房,每个平房都是一个独立的房间。在这个数组里,你有30个房间,编号从0到29。你可以在每个房间里放东西,比如数字。

int flat[30]; // 这就像是有30个房间的一排平房

二维数组

 int a[2][30]; 可以想象成一栋两层的楼房,每层有30个房间。这就像是你有两排平房叠加在一起。在C语言中,你可以通过两个数字来访问这些房间,第一个数字告诉你是哪一层,第二个数字告诉你是哪个房间。

int building[2][30]; // 这就像是一个有两层,每层有30个房间的楼房

如果你想进入第一层的第十个房间,你可以通过 building[0][9] 来访问,因为在C语言中,数组的索引是从0开始的。

多维数组

 int a[4][2][10]; 就像是一个更大的楼房群。想象你有一个小区,里面有4栋楼,每栋楼有2层,每层有10个房间。在这个数组里,你需要三个数字来确定一个房间的位置:哪栋楼、哪一层、哪个房间。

int complex[4][2][10]; // 这就像是一个有4栋楼,每栋楼有2层,每层有10个房间的小区

所以,当你看到 int a[5][4][2][10]; 这样的四维数组时,你可以想象成一个更大的社区,有5个小区,每个小区有4栋楼,每栋楼有2层,每层有10个房间。你需要四个数字来找到一个特定的房间。

3.数组的定义

定义一个数组,在内存里分配空间。

一维数组的定义:

在C语言中,数组是一系列相同类型数据的集合。当你定义一个数组时,你通常会告诉计算机两件事:这个数组里的数据是什么类型的,以及数组里有多少个数据。

比如说,int a[10]; 这行代码就像是你告诉计算机:“嘿,我需要一个能存放10个整数的空间。” 这里的 int 表示数组里的数据都是整数类型,a 是这个数组的名字,[10] 告诉计算机数组里有10个整数。

同样的,char b[5]; 这行代码就像是你说:“我需要一个能存放5个字符的空间。” char 表示字符类型,b 是数组的名字,[5] 表示数组里有5个字符。

现在,有趣的部分来了。在C语言中,你其实不需要一开始就告诉计算机数组里有多少个数据。如果你在定义数组的时候就给它赋值,计算机会自动数一数你给了多少个数据,然后创建一个刚好能放下这些数据的数组。

看看这个例子:

#include <stdio.h>

int main(int argc, char *argv[]) {
  int a[] = {1, 2, 3, 4, 5}; // 注意这里没有写[5]
  printf("%d\n", sizeof(a)); // 这里会打印出数组a占用的总字节数
  return 0;
}

在这个例子里,int a[] = {1, 2, 3, 4, 5}; 这行代码就像是你告诉计算机:“我有这些数字,1, 2, 3, 4, 5,请你给我一个能放下它们的空间。” 你没有说需要多大的空间,但是因为你给了5个数字,计算机就会创建一个能存放5个整数的数组。

printf("%d\n", sizeof(a)); 这行代码会打印出数组 a 占用的总字节数。因为 a 是一个整数数组,每个整数在大多数计算机上占用4个字节,所以这个数组总共占用20个字节(5个整数 * 4个字节/整数 = 20字节)。

二维数组的定义:

首先,二维数组的定义就像是你在告诉计算机:“我需要一个表格。” 这个表格由行和列组成,就像是一个棋盘或者电影院的座位图。在C语言中,你会这样定义一个二维数组:

int a[4][5];

这里的 int 表示表格里每个格子都要存放一个整数。a 是这个表格的名字。[4][5] 告诉计算机这个表格有4行和5列,总共20个格子。

现在,如果你想给这个表格里的每个格子赋一个初始值,你可以这样写:

int a[4][5] = {
  {1, 2, 3, 4, 5},    // 第一行的值
  {6, 7, 8, 9, 10},   // 第二行的值
  {11, 12, 13, 14, 15}, // 第三行的值
  {16, 17, 18, 19, 20}  // 第四行的值
};

但是,在C语言中,有一个很酷的特性:如果你在定义二维数组时就给它赋值,你可以不用告诉计算机有多少行,只需要告诉它每行有多少列。计算机会自动根据你提供的数据来确定行数。就像这个例子:

#include <stdio.h>

int main(int argc, char *argv[]) {
  int a[][3] = {
    {1, 2, 3},    // 第一行
    {4, 5, 6},    // 第二行
    {7, 8, 9},    // 第三行
    {10, 11, 12}  // 第四行
  };
  printf("%d\n", sizeof(a)); // 打印出数组a占用的总字节数
  return 0;
}

在这个例子中,int a[][3] 这行代码告诉计算机:“我要一个表格,每行有3列,但我不告诉你有多少行,你自己数一数我给的数据,然后决定行数。” 因为我们提供了4行数据,计算机就会创建一个有4行3列的表格。

printf("%d\n", sizeof(a)); 这行代码会打印出这个表格占用的总字节数。在这个例子中,因为 a 是一个整数数组,每个整数占用4个字节,所以这个表格总共占用48个字节(4行 * 3列 * 4字节/整数 = 48字节)。

4.数组的初始化

4.1一维数组的初始化

定义数组的时候,顺便给数组的元素赋初值,即开辟空间的同时并且给数组元素赋值。

在C语言中,初始化一个一维数组就像是你给一排房间分配房客。你可以决定每个房间住哪些房客,也可以只安排前几个房间,剩下的房间就会自动空着(在C语言中,空着就是0)。

全部初始化的情况就像是你有一个有5个房间的房子,你决定了每个房间的房客是谁:

int a[5] = {2, 4, 7, 8, 5}; // 每个房间都有指定的房客

这里,a[0]=2 就像是第一个房间住了编号为2的房客,a[1]=4 就是第二个房间住了编号为4的房客,以此类推。

部分初始化的情况就像是你只决定了前几个房间的房客,剩下的房间就会自动空出来:

int a[5] = {2, 4, 3}; // 只指定了前三个房间的房客

在这个例子中,a[0]=2a[1]=4a[2]=3 表示前三个房间有房客,而 a[3]=0a[4]=0 表示第四个和第五个房间是空的。

例子:

#include <stdio.h>

int main(int argc, char *argv[]) {
  int a[5] = {2, 3, 5}; // 只指定了前三个房间的房客
  int i;
  for(i = 0; i < 5; i++) {
    printf("a[%d] = %d\n", i, a[i]); // 这里会打印出每个房间的房客编号
  }
  return 0;
}

这段代码就像是你在检查每个房间的房客。你从第一个房间开始,一直检查到第五个房间。因为你只指定了前三个房间的房客,所以第四个和第五个房间会显示为0,表示没有房客。

当你运行这段代码时,它会打印出:

a[0] = 2
a[1] = 3
a[2] = 5
a[3] = 0
a[4] = 0

 4.2 二维数组的定义并初始化

首先,二维数组就像是一个小公寓楼,每层有几个房间。在C语言中,你可以创建一个这样的公寓楼,并且决定每个房间里放什么。

按行初始化的情况:

a、全部初始化

int a[2][2] = {{1, 2}, {4, 5}};

这就像是你有一个两层的公寓楼,每层有两个房间。你决定了每个房间的房客是谁。a[0][0] = 1 就像是第一层的第一个房间住了编号为1的房客,a[0][1] = 2 是第一层的第二个房间住了编号为2的房客,以此类推。

b、部分初始化

int a[3][3] = {{1, 2}, {1}};

这就像是你有一个三层的公寓楼,每层有三个房间。你只决定了第一层的前两个房间和第二层的第一个房间的房客。剩下的房间自动空出来(在C语言中,空着就是0)。所以,a[0][0] = 1 表示第一层的第一个房间住了编号为1的房客,a[0][1] = 2 是第一层的第二个房间,而 a[0][2] = 0 表示第一层的第三个房间是空的,因为你没有指定。

逐个初始化的情况:

全部初始化

int a[2][3] = {2, 5, 4, 2, 3, 4};

这就像是你有一个两层的公寓楼,每层有三个房间,你决定了每个房间的房客。这里不是按层来初始化,而是一个房间接一个房间地分配房客。

部分初始化

int a[2][3] = {3, 5, 6, 8};

这种情况下,你只决定了前四个房间的房客。所以,第一层的三个房间和第二层的第一个房间有房客,剩下的房间自动空出来。

5.数组元素的引用方法

一维数组元素的引用方法

一维数组就像是一排房间,每个房间里有一个东西,比如数字。你可以通过下标来找到每个房间里的东西。下标就像是房间的门牌号,告诉你这个房间在数组中的位置。

例如,如果有一个一维数组 int a[5];,那么:

  1. a[0] 表示第一个房间里的东西。
  2. a[1] 表示第二个房间里的东西。
  3. 以此类推,a[2]a[3]a[4] 分别表示第三、第四、第五个房间里的东西。

二维数组元素的引用方法

二维数组就像是一个小公寓楼,有很多层,每层有很多房间。你可以通过行下标和列下标来找到每个房间里的东西。

例如,如果有一个二维数组 int a[4][5];,那么:

  1. a[0][0] 表示第一层的第一个房间里的东西。
  2. a[0][1] 表示第一层的第二个房间里的东西。
  3. a[1][0] 表示第二层的第一个房间里的东西。
  4. 以此类推,你可以用 a[1][1]a[2][2]a[3][4] 来找到其他房间里的东西。

字符数组

字符数组的初始化

首先,我们有一个字符数组 c1,它包含了一些字符:

char c1[] = {'c', ' ', 'p', 'r', 'o', 'g'};

这就像是你有一个房间,里面放了一些字母。每个字母都占一个位置。例如,c1[0] 是第一个房间,里面放了字母 ‘c’,c1[1] 是第二个房间,里面放了空格,以此类推。

字符串方式的初始化

然后,我们有一个字符数组 c2,它用字符串方式初始化:

char c2[] = "c prog";

这就像是你有一个房间,里面放了一个字符串 “c prog”。注意,字符串的最后会自动加上一个特殊的字符 ‘\0’,表示字符串的结束。

二维字符数组

接下来,我们有一个二维字符数组 a

char a[][5] = {
  {'B', 'A', 'S', 'I', 'C'},
  {'d', 'B', 'A', 'S', 'E'}
};

这就像是你有一个小公寓楼,有两层,每层有五个房间。每个房间里放了一个字母。例如,a[0][0] 是第一层的第一个房间,里面放了字母 ‘B’,a[1][3] 是第二层的第四个房间,里面放了字母 ‘S’。

字符串方式的二维数组初始化

最后,我们有一个二维字符数组 a,用字符串方式初始化:

char a[][6] = {"hello", "world"};

这就像是你有一个小公寓楼,有两层,每层有六个房间。第一层的第一个房间里放了字符串 “hello”,第二层的第一个房间里放了字符串 “world”。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了C语言的数组,祝愿你我的朋友在学习的路上一帆风顺,也祝愿我会成为一个优秀的嵌入式工程师。

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值