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

相关文章

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而