7.C基础_数组

news2025/1/22 13:06:35

一维数组

1、数组定义

形式:<数据类型> <数组名>[元素数量],如:int a[3];

数组的元素:组成数组的各个变量

注意:

  • 数组中各元素的数据类型要求相同
  • 元素数量必须为整数,数组一旦创建,便不能改变元素的数量。

2、数组初始化

2.1 全部元素初始化

全部元素初始化就是元素数量有多少个,就对数组进行赋值多少个。

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

2.2 元素部分初始化

元素部分初始化就是赋值的个数小于元素数量。

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

特点:未赋值部分的值不确定。

2.3 元素全部没初始化

元素全部没初始化就是不进行赋值。

如:int a[5];

特点:全局数组默认是0,局部数组值是不确定

2.4 省略元素数量初始化

元素数量可以不写,此时后面赋值多少个元素,元素数量就是多少

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

特点:此时数组的元素数量就是5,相当于int a[5] = {1, 2, 3,4,5};

3、数组引用

形式:数组名[下标],如:a[0]引用数组的第0个数据

注意:下标从0开始,范围是0~(元素数量-1)

4、内存分配

4.1 内存分配框图

数组的元素在内存中是连续存储的,每个元素所占的空间、总数组大小都与定义时的类型有关

例如:定义int a[3]={1,2,3},内存的分配如下:

4.2 数组占用内存空间

定义式:

数组所占用的空间 = 数组元素个数 * sizeof(元素数据类型),对于上述size = 3 * sizeof(int);

编程中使用的方法:

数组占用内存空间 = sizeof(数组名),对于上述size = sizeof(a);

4.3 数组元素个数

编程中使用的方法:

数组元素个数 = sizeof(数组名)/sizeof(元素数据类型),对于上述size = sizeof(a)/sizeof(int);

4.4 数组名的含义

数组名代表整个数组

数组名代表数组的首地址,即:a=&a[0]

二维数组

1、数组定义

形式:<数据类型> <数组名>[行个数][列个数],如:int a[3][4];

注意:

  • 行可以省略、列不可以省略
  • 元素的个数 = 行数*列数

2、数组初始化

二维数组的初始化需要用" { } "来区分行,具体初始化如下:

2.1 全部元素初始化

全部元素初始化就是元素数量有多少个,就对数组进行赋值多少个。

如:int a[2][3] = {{1,2,3},{4,5,6}};

2.2 元素部分初始化

元素部分初始化就是赋值的个数小于元素数量。

如:int a[2][3] = {{1},{4,5,6}};

特点:这里的1是输入第0行,4,5,6属于第1行,元素不够只会在当前行补0,即:a[0][1]=a[0][2]=0

2.3 第一维长度省略初始化

第一维长度省略初始化就是行可以不写,那么分行的原则是根据列或者" { } "来分的。

如:int a[][3] = {{1},{4,5,6}};这就是2行

3、数组引用

形式:数组名[下标][下标],如:a[0][1]引用数组的第0行第1列的数据

注意:下标从0开始,范围是0~(元素数量-1)

4、内存分配

4.1 内存分配框图

二维数组的元素在内存中是按行序进行排列的,内存排列依旧是连续的。

二维数组可以看成两部分组成:二维数组由多个一维数组组成,一维数组的个数就是定义时的行数;一维数组由多个数据组成,数据的个数就是定义时的列数。这两个部分都有各自的名字:

  • a是二维数组名
  • a[i]是一维数组名(如:a[0])。

例如:定义int a[2][3] = {{1,2,3},{4,5,6}};,内存的分配如下:

4.2 数组占用内存空间

定义式:

二维数组所占用的空间 = 数组元素个数 * sizeof(元素数据类型),对于上述size = 2 * 3 * sizeof(int);

编程中使用的方法:

二维数组占用内存空间 = sizeof(数组名),对于上述size = sizeof(a);

二维数组中的列占用空间 = sizeof(数组名[行号]),对于上述size_col = sizeof(a[0])

二维数组中的列数 = 列占用空间/sizeof(类型),对于上述col = sizeof(a[0])/sizeof(int)

二维数组中的行数 = 二维数组总空间/列占用空间,对于上述row = sizeof(a)/sizeof(a[0])

字符数组与字符串

字符数组就是类型为char的数组,字符串就是结尾为' \0 '的字符数组。

字符数组赋值

1、一般赋值

字符数组的赋值满足" 一维数组 "中" 2.数组初始化的内容 "。举例如下:

ch[5] = { '1','2','3','4','5' };

ch[5] = { '1','2','3'};未写的部分自动补' \0 ',' \0 '的ASCII码就是0

2、字符串赋值

注意:字符串赋值时,数组大小要多一位,用于存储' \0 '

ch[6] = { "12345" };

ch[6] = "12345";

ch[ ]  = "12345";  这个数组大小是6

scanf获取空格的方法

使用scanf("%s",arr);获取字符串时,会出现空格不能被获取,情况如下:

解决方法:使用scanf("%[^\n]",arr);来获取以换行为结束符的字符串,效果如下:

打印二维字符数组

打印二维字符数组有遍历、使用字符串形式这两种方式进行打印。

使用字符串形式的方法如下:

数组常用代码段

一维数组

1、计算大小的宏

#define ARRAY1_SIZE(array,type) sizeof(array)/sizeof(type)

2、遍历

void Array1Print(char* array,int size){
	int i;
	for(i=0;i<size;i++){
		printf("%d ",array[i]);
	}
}

二维数组

1、计算大小的宏

/* 计算二维数组总大小 */
#define ARRAY2_SIZE(array,type) 	sizeof(array)/sizeof(type)
/* 计算二维数组中一维数组大小(列大小) */
#define ARRAY2_COL_SIZE(array) 		sizeof(array[0])
/* 计算二维数组的列数 */
#define ARRAY2_COL_NUM(array,type)	ARRAY2_COL_SIZE(array)/sizeof(type)
/* 计算二维数组的行数 */
#define ARRAY2_ROW_NUM(array,type) 	sizeof(array)/ARRAY2_COL_SIZE(array)

2、遍历,需要根据需求改变列的值

/* 遍历打印列为4的二维数组 */
void Array2Print(int(*array)[4] ,int row,int col){
	int i,j;
	for(i=0;i<row;i++){
		for(j=0;j<col;j++){
			printf("%d ",array[i][j]);
		}
		printf("\n");
	}	
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图片管理组建

父 <template><div style"height: 100%;"><!-- 加载中 --><div class"demo-spin-cols" :style"loading"><Icon type"ios-loading" size18 class"demo-spin-icon-load"></Icon><div…

【Kubernetes】Deployment 的状态

Deployment 的状态 Deployment 控制器在整个生命周期中存在 3 3 3 种状态&#xff1a; 已完成&#xff08;Complete&#xff09;进行中&#xff08;Progressing&#xff09;失败&#xff08;Failed&#xff09; 通过观察 Deployment 的当前特征&#xff0c;可以判断 Deploym…

『 Linux 』线程安全的单例模式,自旋锁与读写锁

文章目录 单例模式懒汉模式与饿汉模式 自旋锁读写锁 单例模式 单例模式是一种创建型设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点来访问该实例; 这在需要严格控制如何及合适访问某个唯一资源型下有一定作用; 单利模式的主要特点为如下: 私有构造函数 单…

使用Dockerfile构建一个包含NVIDIA的PyTorch和Detectron2的镜像

查看Dockerfile 以下是详细的解释&#xff1a; # 使用更具体的标记来固定基础镜像版本&#xff0c;确保环境一致性 FROM nvcr.io/nvidia/pytorch:23.01-py3# 设置工作目录和环境变量 WORKDIR /root ENV DETECTRON2_PATH /root/detectron2# 复制并安装 Detectron2 COPY detect…

YOLOv10模型训练、验证、推理

前言 yolov10关于模型的各种参数其实都写到了一起&#xff08;包括训练、验证和推理的参数&#xff09;&#xff0c;在./ultralytics/cfg/default.yaml中&#xff0c;通过使用这些指令我们可以实现各种所需的操作。 代码地址&#xff1a;https://github.com/THU-MIG/yolov10 …

【Material-UI 组件】Autocomplete 中的 Grouped 功能详解

文章目录 一、组件概述1.1 Grouped 功能介绍1.2 适用场景 二、基础用法2.1 实现 Grouped 功能代码拆解 三、高级配置3.1 自定义组渲染3.2 常见配置 四、最佳实践4.1 数据排序4.2 组标题优化4.3 性能优化4.4 可访问性 五、总结 Grouped 功能使得 Autocomplete 组件能够按特定维度…

Linux系统驱动(三)ioctl函数

文章目录 一、ioctl函数&#xff08;一&#xff09;函数格式&#xff08;二&#xff09;ioctl命令码的组成1. 命令码的组成2. 自己封装命令码2. 内核提供了封装命令码的宏 &#xff08;三&#xff09;使用示例1. 驱动2. 应用 一、ioctl函数 Linux内核开发者想要将数据的读写和…

c++ 21 指针

*像一把钥匙 通过钥匙去找内存空间 间接修改内存空间的值 不停的给指针赋值 等于不停的更改指针的指向 指针也是一种数据类型 指针做函数参数怎么看都不可以 指针也是一个数据类型 是指它指向空间的数据类习惯 作业 野指针 向null空间地址copy数据 不断改变指针指向 …

JVM的组成 -- 字节码文件

类加载器(ClassLoader)&#xff1a;将字节码文件加载到内存中运行时数据区(JVM管理的内存)&#xff1a;负责管理JVM使用的内存&#xff0c;比如创建对象和销毁对象执行引擎&#xff1a;即时编译器、解释器、垃圾回收器。负责本地接口的调用本地接口&#xff1a;native方法&…

高等数学 第八讲 积分学计算_不定积分_定积分_反常积分的计算

高等数学 第八讲 积分学计算 文章目录 高等数学 第八讲 积分学计算1.不定积分的计算1.1 基本积分公式1.2 不定积分的计算方法1.2.1 凑微分法1.2.2 换元法1.2.3 分布积分法1.2.4 有理函数的积分计算(待更新)1.2.5 不定积分的一些计算结论总结 2.定积分的计算2.1 牛顿莱布尼茨公式…

大数据Flink(一百零八):阿里云与开源的功能优势对比

文章目录 阿里云与开源的功能优势对比 阿里云与开源的功能优势对比 下面通过表格介绍阿里云实时计算Flink全托管产品的功能点和价值&#xff0c;以及和开源Flink的对比优势。 类型 功能 描述 价值 性能与成本 资源利用率提升 可以根据业务负载进行弹性扩缩容。 更好的…

手摸手教你前端和后端是如何实现导出 Excel 的?

前言 大家好呀&#xff0c;我是雪荷。在上篇文章&#xff08;EasyExcel 初使用—— Java 实现多种写入 Excel 功能-CSDN博客&#xff09;中给大家介绍了 Java 是如何写入 Excel 的&#xff0c;那么这篇算是对上篇文章的拓展&#xff0c;主要介绍前端和后端分别是如何导出数据至…

一篇了解: MyBatis-Plus 操作数据库的使用

目录 一、MyBatis-Plus介绍 二、基础使用 2.1 准备工作 2.2 编码 2.3 CRUD单元测试 三、MyBatis-Plus复杂操作 3.1 打印日志 3.2 常见注解 3.2.1 TableName 3.2.2 TableField 3.2.3 TableId 3.3 条件构造器 3.3.1 QueryWrapper 3.3.2 UpdateWrapper 3.3.3 Lamb…

网络空间安全专业怎么样,可通过哪些途径自学?

网络空间安全主要研究网络空间的组成、形态、安全、管理等&#xff0c;进行网络空间相关的软硬件开发、系统设计与分析、网络空间安全规划管理等。例如&#xff0c;网络犯罪的预防&#xff0c;国家网络安全的维护&#xff0c;杀毒软件等安全产品的研发&#xff0c;网络世界的监…

计算机常识与NOIP历史-CSP初赛知识点整理

真题练习 [2021-CSP-J-第2题] 以下奖项与计算机领域最相关的是&#xff08; &#xff09;。 A.奥斯卡奖 B.图灵奖 C.诺贝尔奖 D.普利策奖 [2017-NOIP-第7题] 中国计算机学会于( )年创办全国青少年计算机程序设计竞赛。 A. 1983 B. 1984 C. 1985 D. 1986 [2018-NOIP-第5题…

Professional Scrum Master (PSM) 官方认证培训班:掌握Scrum,提升项目管理能力

在快速变化的商业环境中&#xff0c;高效的项目管理和团队协作是企业成功的关键。作为一种广泛认可的敏捷框架&#xff0c;Scrum已成为推动项目成功和提高团队效率的重要工具。为了帮助专业人士掌握Scrum方法和实践&#xff0c;Scrum.org推出了Professional Scrum Master (PSM)…

C++ 初探:不要‘下次一定’,立即开始你的C++之旅

C初识 文章目录 C hello worldnamespace&#xff0c;命名空间命名空间的使用域作用限定符展开命名空间指定展开命名空间成员 C的域 C的输入和输出缺省参数函数重载引用&#xff08;reference&#xff09;引用概念引用的特性引用的使用const引用 inlinenullptr C hello world #…

学习C语言遇到的问题

前言 这是博主在班训班培训期间学习C基础过程中遇到的一些问题&#xff0c;我把遇到的问题以及这些问题的解答链接统一放在这篇文章了。这只是博主遇到的一些问题&#xff0c;可能不会适用于全部人&#xff0c;希望大家把这篇文章当做查漏补缺的内容吧。 问题一:把字符串赋给…

三十种未授权访问漏洞复现 合集( 三)

未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷&#xff0c;导致其他用户可以直接访问&#xff0c;从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…

CnosDB 元数据集群 – 分布式时序数据库的大脑

CnosDB 是一个分布式时序数据库系统&#xff0c;其中元数据集群是核心组件之一&#xff0c;负责管理整个集群的元数据信息。 1. 概述 CnosDB 是一个分布式时序数据库系统&#xff0c;其中元数据集群是核心组件之一&#xff0c;负责管理整个集群的元数据信息。元数据包括数据库…