【C】数组(array)

数组(array)

数组的概念

数组是一组相同类型元素的集合

  • 数组中存放的是1个或者多个数据,但是数组元素个数不能为0
  • 数组中存放的多个数据,类型是相同

数组分为一维数组多维数组,多维数组一般比较多见的是二维数组

一维数组的创建和初始化

数组创建

一维数组

type arr_name[常量值];//arr_name数组名,可自定义//type 数组元素的类型//[]中的常量值是用来指定数组的大小的

例:

int arr[5];//整数类型,存放五个元素
float arr2[7];//浮点型,存放七个元素
char arr3[3];//字符型,存放三个元素

数组的初始化

有时候,数组在创建的时候,我们需要给定一些初始值,这种就称为初始化

数组的初始化一般使用大括号,将数据放在大括号中

 //完全初始化int arr[5]={1, 2,3,4,5};
//不完全初始化int arr2[5]= {1};//第一个元素初始化为1,剩余的元素默认初始化为0int arr3[5]={0};//错误的初始化-初始化项太多
int arr4[3]={1,2,3,4};

数组一旦有初始化的时候,数组的大小可以省略

int arr[5] = { 1,2,3,4,5 };
int arr[] = { 1,2,3,4,5 };//根据初始化的内容来确定元素个数

这时,二者是一样的

但是:

int arr[5] = { 0 };//含有五个元素且元素全为0
int arr[] = { 0 };//含有一个元素,为0

这两个数组含义是完全不同的

数组的类型

数组算是一种自定义类型,去掉数组名留下的就是数组的类型

int arr1[10];//int 为数组元素的类型,arr1数组的类型是 int[10] 
int arr2[12];//int 为数组元素的类型,arr2数组的类型是 int[12] 
char ch[5];//char 为数组元素的类型,ch数组的类型是 char[5]

注:

int main() {int a = 10;printf("%zd\n", sizeof(a));printf("%zd\n", sizeof(int));return 0;
}

此时输出都为4,说明用类型和用变量的结果是一样的

此时,推及到数组上:

int main() {int arr[10] = { 0 };printf("%zd\n", sizeof(arr));printf("%zd\n", sizeof(int[10]));return 0;
}

此时的输出都为40

一维数组的使用

数组下标

规定数组下标是从0开始的,假设数组有n个元素,最后一个元素的下标是n-1,下标就相当于数组元素的编号,如下:

 int arr[10]={1,2,3,4,5,6,7,8,9,10};

在这里插入图片描述

数组的访问提供了一个操作符[ ],这个操作符叫:下标访问操作符
arr和10为操作数

比如:
访问下标为7的元素, arr[7]

#define _CRT_SECURE_NO_WARNINGS
#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;
}

输出为:

在这里插入图片描述

数组的输出

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };for (int i = 0;i < 10;i++) {printf("%d\n", arr[i]);}return 0;
}

数组的输入

for (int i = 0;i < 10;i++) {scanf("%d", &arr[i]);
}

一维数组在内存中的存储

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };for (int i = 0;i < 10;i++) {printf("&arr[%d]=%p\n",i,&arr[i]);//打印各个元素的地址}return 0;
}

在这里插入图片描述
x64:64位程序,地址长

在这里插入图片描述

x86:32位程序,地址短

在这里插入图片描述

可以看出,相邻两个元素(int)的地址相差4,这是因为每个元素(int)占四个字节,一维数组在内存中是连续存放

sizeof计算一维数组元素的个数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10};printf("%zd\n", sizeof(arr));//计算的是整个数组的大小,单位是字节  10*4=40printf("%zd\n", sizeof(arr[0]));//每个元素所占大小  4printf("%d\n", sizeof(arr) / sizeof(arr[0]));//元素个数   10return 0;
}

二维数组

二维数组的概念

数组的元素都是内置类型的,如果我们把一维数组做为数组的元素,这时候就是二维数组
二维数组作为数组元素的数组被称为三维数组,二维数组以上的数组统称为多维数组

在这里插入图片描述

二维数组的创建

type arr_name[常量值1][常量值2];//常量值1表示行,常量值2表示列

二维数组的初始化

//完全初始化
int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
//   1   2   3   4   5
//   6   7   8   9   10
//   11  12  13  14  15 
//不完全初始化
int arr[3][5] = { 1,2,3,4,5,6,7,8};
//   1   2   3   4   5
//   6   7   8   0   0
//   0   0   0   0   0
//按行初始化
int arr[3][5] = { {1,2},{3,4},{5,6 } };
//   1   2   0   0   0
//   3   4   0   0   0
//   5   6   0   0   0

二维数组如果初始化了,行可以省略,但是列不能省略

int arr[0][5] = { {1,2},{3,4},{5,6 } };

二维数组的下标

二维数组的行是从0开始的,列也是从0开始的

int arr[3][5]={1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};

在这里插入图片描述

访问二维数组中的元素:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {int arr[3][5] = { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 };//   1   2   3   4   5//   2   3   4   5   6//   3   4   5   6   7printf("%d", arr[2][4]);//打印二行四列的元素return 0;
}

输出结果为:

在这里插入图片描述

二维数组的输出

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {int arr[3][5] = { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 };for (int i = 0;i < 3;i++) {      //行for (int j = 0;j < 5;j++) {  //列printf("%d ", arr[i][j]);}printf("\n");}return 0;
}

输出为:

在这里插入图片描述

二维数组的输入

for (int i = 0;i < 3;i++) {for (int j = 0;j < 5;j++) {scanf("%d ",&arr[i][j]);}
}

二维数组在内存中的存储

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {int arr[3][5] = { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 };for (int i = 0;i < 3;i++) {      for (int j = 0;j < 5;j++) {  printf("&arr[%d][%d]=%p\n ",i,j,&arr[i][j]);}printf("\n");}return 0;
}

输出为:

在这里插入图片描述

可以看出,相邻两个元素(int)的地址相差4,二维数组在内存中并不是多行多列排列,也是连续存放

在这里插入图片描述

二维数组的每一行是一个一维数组,且
arr[0]为第一行的数组名
arr[1]为第二行的数组名
.
.
.

C99中的变长数组

在C99标准之前,C语言在创建数组的时候,数组大小的指定只能使用常量、常量表达式
C99中引入了变长数组的概念
变长数组(variable-length array,简称VLA) 就是数组大小是变量的数组

 int arr1[10];//常量int arr2[3+5];//常量表达式

VS2022不支持C99中的变长数组,但gcc支持

	int n=10;int arr[n];

变长数组的数组长度只有运行时才能确定,因此变长数组不能初始化

#include <stdio.h>
int main(){int n=0;int arr[n];scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&arr[i]);}for(int i=0;i<n;i++){printf("%d ",arr[i]);}return 0;
} 

输出为:

``在这里插入图片描述

练习:多个字符从两端移动,向中间会汇聚

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main() {char arr1[] = "welcome!!!!!!";char arr2[] = "#############";int left = 0;
//	int right = sizeof(arr1) / sizeof(arr1[0])-2;//a  b  c  \0 长度为4
//	int right = sizeof(arr1) -2;//字符类型数组可不除sizeof(arr1[0])int right = strlen(arr1 - 1);//strlen求字符串长度,统计的是\0前的字符个数while(left<=right){arr2[left] = arr1[left];arr2[right] = arr1[right];printf("%s\n", arr2);Sleep(1000);//休眠1000mssystem("cls");//执行系统命令,库函数 cls清屏left++;right--;}printf("%s\n", arr2);return 0;
}

END…

ps:快期中了…

没写完的功课,没准备的考试,
没做完的PPT,没想出的方案,
没什么理由,也不想找什么借口,
我只是有点累了,所以想停一下
我学会了直面自己的脆弱,
学会了正视那个偶尔没电的自己,
不再反复质疑自己“是不是不够努力”
我很棒,我只是有点不在状态,
找个公园躺下,看看天空透透气,然后又恢复力气

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/452079.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递归神经网络解释(RNN)

Recurrent Neural Network (RNN) 如今,不同的机器学习技术用于处理不同类型的数据。最难处理和预测的数据类型之一是顺序数据。顺序数据与其他类型的数据不同,因为虽然可以假设典型数据集的所有特征都是与顺序无关的,但不能假设顺序数据集是无关的。为了处理这种类型的数据…

Kibana可视化Dashboard如何基于字段是否包含某关键词进行过滤

kinana是一个功能强大、可对Elasticsearch数据进行可视化的开源工具。 我们在dashboard创建可视化时&#xff0c;有时需要将某个index里数据的某个字段根据是否包含某些特定关键词进行过滤&#xff0c;这个时候就可以用到lens里的filter功能很方便地进行操作。 如上图所示&…

【笔记】【YOLOv10图像识别】自动识别图片、视频、摄像头、电脑桌面中的花朵学习踩坑

&#xff08;一&#xff09;启动 创建环境python3.9 打开此环境终端 &#xff08;后面的语句操作几乎都在这个终端执行&#xff09; 输入up主提供的语句&#xff1a;pip install -r requirements.txt 1.下载pytorch网络连接超时 pytorch网址&#xff1a; Start Locally | P…

centos系列图形化 VNC server配置,及VNC viewer连接,2024年亲测有效

centos系列图形化 VNC server配置&#xff0c;及VNC viewer连接 0.VNC服务介绍 VNC英文全称为Virtual Network Computing&#xff0c;可以位操作系统提供图形接口连接方式&#xff0c;简单的来说就是一款桌面共享应用&#xff0c;类似于qq的远程连接。该服务是基于C/S模型的。…

【STM32-HAL库】STM32F系列新建工程并点灯教程(小白向)

本帖是STM32HAL库系列新建工程系列合集 stm32-HAL库cubeMX新建工程教程&#xff08;以F103C8T6为例&#xff09;https://blog.csdn.net/qq_39150957/article/details/136637881?fromshareblogdetail&sharetypeblogdetail&sharerId136637881&sharereferPC&sha…

uniapp使用html2canvas时,页面内的image元素模糊

不废话很简单只需要将image改成img就行 改之前 改之后 原因可能是因为uniapp里面的image标签做了某种处理

[已解决]DockerTarBuilder永久解决镜像docker拉取异常问题

前阵子发现阿里云的docker加速镜像失效了&#xff08;甚至连nginx都拉取不了&#xff09;&#xff0c;重新换了并且加多了网络上比较常用的dokcer加速源&#xff0c;可以解决一部分问题&#xff0c;但仍然有一些镜像的某个版本或一些比较冷的镜像就是拉取不了&#xff0c;原因未…

Spring Security 基础配置详解(附Demo)

目录 前言1. 基本知识2. Demo3. 实战 前言 基本的Java知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 1. 基本知识 HttpSecurity 是 Spri…

51单片机快速入门之 LCD1602 液晶显示屏2024/10/19

51单片机快速入门之 LCD1602 液晶显示屏 Proteus 电路图 : 74HC595 拓展电路可以不用,给 p0-p17 添加上拉电阻也可以!,我这里是方便读取和节省电阻线路 (因为之前不知道 在没有明确循环的情况下&#xff0c;Keil编译器可能会在main()中自动添加类似以下的汇编代码&#xff1a…

ChatGPT Plus 升级全攻略

ChatGPT Plus 升级全攻略 最近有很多人想知道如何顺利升级到 ChatGPT Plus。这里有详细步骤,确保你不会错过任何环节。 第一步:登录 OpenAI 首先,你需要去 chat.openai.com。 然后,点击“登录”,输入你的邮箱和密码。 接下来,确保你输入的信息是正确的。 第二步:点击“升级…

HttpURLConnection构造请求体传文件

HttpURLConnection构造请求体传文件 在Java中&#xff0c;使用HttpURLConnection构造请求体传输文件&#xff0c;你需要做以下几步&#xff1a; 1、创建URL对象指向你想要请求的资源。 2、通过URL打开连接&#xff0c;转换为HttpURLConnection实例。 3、设置请求方法为POST。 …

软件测试工程师:如何写出好的测试用例?

软件测试用例(Test Case)是软件测试过程中的一种详细文档或描述&#xff0c;用于描述在特定条件下&#xff0c;对软件系统或组件进行测试的步骤、输入数据、预期输出和预期行为。编写高质量的测试用例是确保软件质量的关键步骤之一。以下是一些编写优秀测试用例的建议&#xff…

StarRocks产品简介

StarRocks概念 StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理&#xff0c;就可以用 StarRocks 来支持多种数据分析场景的极速分析。 StarRocks架构 Star…

使用Arcgis批量自动出图

操作方法如下&#xff1a; 1 2 3 4 5 6 7 设置好选项&#xff0c;开始打印。 8 生成pdf。 第一步&#xff1a;shp放到数据库中&#xff0c;标注转注记&#xff0c;然后编辑注记&#xff0c;符号样式设置好。准备出图&#xff1a;&#xff08;转注记时候尽量压盖监测等选最…

MXO44-2410数字示波器

MXO44-2410数字示波器 R&SMXO 4 系列是新一代示波器的首款产品&#xff0c;在性能和价值方面均表现出色。这些仪器提供十年一遇的工程突破&#xff0c;以加速洞察。 它们具有世界上最快的 450 万波形/秒的实时更新速率&#xff0c;这意味着工程师可以看到比任何其他仪器更…

李宏毅机器学习2022-HW7-BERT-Question Answering

文章目录 TaskBaselineMediumStrongBoss Code Link Task HW7的任务是通过BERT完成Question Answering。 数据预处理流程梳理 数据解压后包含3个json文件&#xff1a;hw7_train.json, hw7_dev.json, hw7_test.json。 DRCD: 台達閱讀理解資料集 Delta Reading Comprehension …

react 中的hooks中的useState

(1). State Hook让函数组件也可以有state状态, 并进行状态数据的读写操作 (2). 语法: const [xxx, setXxx] React.useState(initValue) (3). useState()说明:参数: 第一次初始化指定的值在内部作缓存返回值: 包含2个元素的数组, 第1个为内部当前状态值, 第2个为更新状态值的…

jmeter用csv data set config做参数化1

在jmeter中&#xff0c;csv data set config的作用非常强大&#xff0c;用它来做批量测试和参数化非常好用。 csv data set config的常用配置项如下&#xff1a; Variable Names处&#xff0c;写上源文件中的参数名&#xff0c;用于后续接口发送请求时引用 Ignore first line…

【Linux】waitpid函数 及其 非阻塞等待和阻塞等待

父进程等待子进程结束可以通过两种方式实现&#xff1a;阻塞等待和非阻塞等待。这两种方式各有优缺点&#xff0c;适用于不同的场景。 简单来说&#xff1a; 阻塞等待&#xff1a;先等你&#xff0c;我再继续 非阻塞等待&#xff1a;不等你&#xff0c;我继续做自己的事&…

初识适配器模式

适配器模式 引入 生活中的例子&#xff1a;当我们使用手机充电时&#xff0c;充电器起到了转换器的作用&#xff0c;它将家用的220伏特电压转换成适合手机充电的5伏特电压。 适配器模式的三种类型 命名原则&#xff1a;适配器的命名应基于资源如何传递给适配器来进行。 类适配…