C 语言基础之数组

2024-09-09 05:32
文章标签 语言 基础 数组

本文主要是介绍C 语言基础之数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 什么是数组
    • 数组变量的声明
    • 多维数组

什么是数组

数组,顾名思义,就是一组数。

假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码:

int ZhangSan_score = 95;
int LiSi_score = 90;
...
...
int LiuDong_score = 100;
int ZhouJie_score = 78;
...
...

30 个同学要写 30 个变量,这太麻烦了。

好在 C 语言里面有数组类型,假设班里有 5 个同学,我们可以定义一个数组:

int score[5];

以上定义可以理解为:数组变量 score 由 5 个元素组成,每个元素都是 int 类型。

它在内存中的分布如图所示:

在这里插入图片描述

数组的元素在内存中是连续的,即一个挨着一个,而且,这些元素必须有相同的类型,例如上图表示都是 int 类型。

数组变量的声明

当你看别人写的代码时,遇到数组的声明或定义,不要慌,是有窍门的。

解析一个声明要从标识符开始,向左或者向右读。特别地,如果标识符的右边是“[”或者“(”,则必须先向右读。

如果标识符右边是“[”,则它代表一个数组。

例如:

int vars[5];

在上述声明中,标识符 vars 的右边是“[”,则我们先要向右读,读作“vars 的类型是数组”,或者“vars 是一个数组”。

既然是数组,那么方括号里的数字就是元素的数量,于是继续向右读它的元素数量,即“该数组有 5 个元素”。读完元素数量后,继续向右直至遇到配对的“]”,看看“]”的右边有没有东西。如果没有东西,就转而向左读,在这里会遇到“int”,这是数组的元素类型,读作“元素的类型是 int”。

最后,把上面的黑体字连在一起,读作“vars 是一个数组,该数组有 5 个元素,元素的类型是 int”。

在这里插入图片描述

数组的元素没有名字,要访问某个元素,需要按照序号来访问,每个元素都有一个序号,也称为“下标”。

序号或者下标从 0 开始。如果一个数组有 N 个元素,那么第一个元素的下标是 0,第二个元素的下标是 1,以此类推,最后一个元素的下标是 N-1

在这里插入图片描述

多维数组

数组的元素类型也可以是数组,于是就有了多维数组。例如:

int iarr [2][3];

这个声明应当这样来读:先从标识符 iarr 开始,因其右边是一对方括号,所以变量 iarr 的类型是数组,且它有两个元素,元素的类型是什么呢?右边又是一对方括号,所以元素的类型还是数组,这又是一个怎样的数组呢?这个素组有 3 个元素,元素的类型是 int.

综上,变量 iarr 是具有 2 个元素的数组,元素的类型是“具有 3 个 int 类型的元素的数组”。或者说,说变量 iarr 是一个数组,它有 2 个元素,元素的类型是 int [3](即由 3 个 int 类型的元组组成的数组)。

如果用类型名来描述,则变量 iarr 的类型是 int [2][3] .

在这里插入图片描述
数组的数组被称为多维数组,声明一个更多维的数组是可能的。例如:

char carr [2][3][5];

这将 carr 声明为具有 2 个元素的数组;它的每一个元素又是具有 3 个元素的数组;而这 3 个元素中的每一个元素又是具有 5 个 char 类型的元素的数组。

多维数组的本质是“元素的类型也是数组”,或者“每个元素也是数组”.

在这里插入图片描述
对于int iarr [2][3] ,更具体的内存图示是:
在这里插入图片描述

【End】

参考资料

《C语言非常道》,李忠,电子工业出版社

这篇关于C 语言基础之数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1150295

相关文章

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的