C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】

目录

  • C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】
    • 一维数组
      • 一维数组的创建
      • 数组的七种初始化
        • 完全初始化:
        • 部分初始化:
        • 字符数组的初始化:
        • 自动初始化为0:
        • 使用`memset`函数初始化:
        • 循环初始化:
        • 指定初始化器(`c99`,`gcc`)支持:
      • 一维数组的使用
        • 案例1:统计随机数的分布
        • 案例2:统计20个1-10的随机数的分布并打印直方图
        • 案例3:给定一个数组,输出数组元素不重复的全排列。
    • 一维数组在内存中的存储
    • 二维数组
      • 二维数组的声明
      • 二维数组的创建
      • 二维数组的初始化
      • 二维数组的使用
      • 二维数组在内存中存储
      • 数组越界问题:
    • 字符数组
      • 字符数组的定义
      • 字符数组初始化
      • 字符数组的输入输出和常用函数
      • 字符数组中单词计数问题以及多维数组的解释
    • 数组作为函数参数
    • 结论

C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】

        在C语言中,数组是一种非常基础且重要的数据结构,它允许我们存储相同类型的数据元素的集合。通过使用数组,我们可以有效地管理和操作一组相关数据,而无需为每个数据元素创建单独的变量。本文将深入探讨C语言中数组的概念、声明、初始化和操作,帮助你更好地理解和运用这一关键特性。

一维数组

        数组Array也是一种复合数据类型,它由一系列相同的类型元素组成,数组的存储和结构体成员类似,数组的元素存储空间也是相邻的。
例如定义一个由4int型元素组成的数组count:int count[4];,数组类型的长度应该用一个整型常量表达式来指定。数组中通过下表或者索引index来访问。
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】

一维数组的创建

类型说明 数组名 [ 常量表达式 ];

例:
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】
输出结果:
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】

数组的七种初始化

完全初始化:

完全初始化:在声明数组的同时给出数组所有元素的值。
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】

部分初始化:

只给数组的前面一部分元素赋值,剩余的元素会被自动初始化为0,对于基本数据类型。
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】

字符数组的初始化:

字符数组可以通过字符串进行初始化,其余的为"0"
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】

自动初始化为0:

对于静态数组和静态存储器的局部数组,如果没有明确初始化,他们会被自动初始化为0
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】

使用memset函数初始化:

memset函数可以用来将数组的每一个字节设置为特定的值,通常用于将数组初始化为0,或者其他重复值,注意memset函数定义包含在头文件string.h中。
函数原型:

void *memset(void *s, int c,unsigned long n); // 将s指向的内存位置后面n个字节的存储空间替换为c;

C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】
输出结果:
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】

循环初始化:

使用循环结构初始化,逐个设置数组元素的值。
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】

指定初始化器(c99,gcc)支持:

c99标准引入了指定初始化器,允许初始化数组的特定元素。
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】

一维数组的使用

对于数组,使用”[]“,下表引用操作符,即arr[0]为数组首元素,arr[n-1]为最后一个元素。

案例1:统计随机数的分布

C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】
输出结果:
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】

案例2:统计20个1-10的随机数的分布并打印直方图

C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印】
输出结果:
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印】

案例3:给定一个数组,输出数组元素不重复的全排列。

C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列】
输出结果:
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列】

一维数组在内存中的存储

C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列】

二维数组

二维数组的声明

二维数组的声明与一维数组相同,一般形式如:

类型说明符 数组名[常量表达式1][常量表达式2];

注意:二维数组行下标的取值范围是[0~n-1] 列下标取值范围是[0~m-1],最大元素标识为 arr[n-1,m-1];
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列】

二维数组的创建

C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列】

二维数组的初始化

//案例一
int a[3][4] = {{1},{2},{3}};等价:int a[3][4] = {{1,0,0,0},{2,0,0,0},{3,0,0,0}};
//案例二
int a[3][4] = {{1}};等价:int a[3][4] = {{1,0,0,0},{0,0,0,0},{0,0,0,0}};
当元素与少于数组总体元素的时候,剩余的元素自动初始化为0;对于shortintlong,就是整数0;对于char,就是字符 '\0';对于floatdouble,就是小数0.0
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列】

二维数组的使用

数组中每个元素都有一个序号,这个序号从0开始,称为下表index,例如a[0][2]表示第1行第三个元素,a[3][5]表示第四行第6个元素。所以我们可以直接通过下表访问数组中元素的值。
通过遍历下标拿到对应元素值:
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列】
输出结果:
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列】
修改下标值:可以通过下标访问数组的值,也可以使用下标对数组的值进行修改。
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列】
输出结果:
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列】

二维数组在内存中存储

C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列】

数组越界问题:

数组的下标是有范围限制的,数组下标规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1,所有数组下标如果小于0或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。c语言本身是不做数组下标越界检查,编辑器也不一定报错,但是编译器不报错并不意味着程序就正确的,在写代码时最好自己做一个数组越界的检查。

字符数组

字符数组的定义

用来存放字符数据的数组是字符数组,C语言用字符数组存放字符串,字符数组中的各元素依次存放字符串的各字符,一维数组存放一个字符串,每个数组元素存放一个字符。二位数组存放多个一维数组也就是字符串,二维数组的行数是字符串的个数。

定义格式:char 数组名[常量表达式];

字符数组初始化

在C语言中,字符串数组是一个非常实用的概念,它允许存储和操作多个字符串。字符串在C语言中通常表示为字符数组,以空字符'\0'结尾,因此,字符串数组可以被看作是字符数组的数组,其中每个元素都是一个独立的字符串。
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列】
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列】
注意:当你初始化字符串数组时,每个字符串的长度不需要相同,但是所有字符串的长度都必须小于或等于你在声明时指定的最大长度。
强调:字符串实际占有单元的数量等于字符串长度+1。定义时注意考虑元素总个数应比实际长度多1。

字符数组的输入输出和常用函数

C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】

C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】

字符数组中单词计数问题以及多维数组的解释

c语言中,处理字符串和字符数组经常涉及到单词计数的问题,一个典型的场景就是从一个句子或段落中统计单词的数量,这通常可以通过查找空格或其他分隔符来实现。下面写一个简单的示例,演示如何在一个字符串中技术单词。
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
输出结果:
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
在这段代码中,countWords函数通过检查每一个字符是否为空格或制表符(由isspace函数判断),来确定单词的边界。当遇到非空格字符且之前没有处于单词中时,单词计数器就会增加。

数组作为函数参数

C语言中,当你将数组作为函数参数的时候,实际上传递的是该数组的地址,也就是指向数组首元素的指针,这一特性使得函数在函数内部可以直接访问和修改数组的内容,但无法改变数组的大小。
当你在函数定义中使用数组类型作为参数时,例如void func(int arr[]),这实际上被编译器处理为void func(int *arr)。也就是说,数组名在这里退化为一个指针,这个指针指向数组的第一个元素。
例1:通过函数传递数组并打印
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
输出结果:
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
例2:修改数组内容:
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
输出结果:
C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】
注意:

  • 数组大小:由于只传递了数组的首地址,函数内部无法知道数组的实际大小,除非你显式地传递它。
  • 修改数组:尽管可以修改数组内容,但不能修改数组本身(如增加或减少元素)。
  • 避免越界:在函数内部操作数组时,必须确保不会访问超出数组边界的位置。

        总之,C语言中数组作为函数参数时,理解其实质上是传递指针这一点非常重要,这样可以帮助你更有效地编写和调试代码。

结论

        数组是C语言中处理数据的有力工具,它们提供了一种简单有效的方式来存储和操作一系列相同类型的数据。理解如何声明、初始化和操作数组对于任何C程序员来说都是至关重要的。希望本文能帮助你更深入地了解和利用数组的潜力!

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

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

相关文章

『大模型笔记』GraphRAG:用于复杂数据发现的新工具现已在GitHub上发布

GraphRAG:用于复杂数据发现的新工具现已在GitHub上发布 文章目录 一. GraphRAG:用于复杂数据发现的新工具现已在GitHub上发布1. 评估和结果2. 研究见解和未来方向二. 参考文献一. GraphRAG:用于复杂数据发现的新工具现已在GitHub上发布 下载 GraphRAG今年早些时候,我们介绍…

博客建站3 - 购买域名

1. 本网站的系统架构2. 选择域名 2.1. 确定域名关键词2.2. 保持简洁易记2.3. 检查域名可用性 3. 域名注册商 3.1. 海外的提供商 3.1.1. GoDaddy3.1.2. Namecheap3.1.3. Google Domains 3.2. 国内的提供商 3.2.1. 阿里云(Alibaba Cloud)3.2.2. 腾讯云&…

0502STM32EXTI中断项目代码实现

STM32EXTI中断函数代码实现 对射式红外传感器&旋转编码器计次配置外部中断的步骤:AFIO相关函数&GPIO的一个函数EXTI相关函数代码NVIC中断函数启动文件里的中断函数名字中断编程的建议: 对射式红外传感器&旋转编码器计次 一般一个模块要写的…

SpringBoot:SpringBoot中如何实现对Http接口进行监控

一、前言 Spring Boot Actuator是Spring Boot提供的一个模块,用于监控和管理Spring Boot应用程序的运行时信息。它提供了一组监控端点(endpoints),用于获取应用程序的健康状态、性能指标、配置信息等,并支持通过 HTTP …

windows下使用编译opencv在qt中使用

记录一下:在windows下qt使用opencv 1、涉及需要下载的软件 CMake 下载地址opecnv下载地址mingw(需要配置环境变量) 这个在下载qt的时候可以直接安装一般在qt的安装路径下的tool里比如我的安装路径 (C:\zz\ProgramFiles\QT5.12\Tools\mingw730_64) 2、在安装好CMake…

ChatGPT对话:Scratch编程中一个单词,如balloon,每个字母行为一致,如何优化编程

【编者按】balloon 7个字母具有相同的行为,根据ChatGPT提供的方法,优化了代码,方便代码维护与复用。初学者可以使用7个字母精灵,复制代码到不同精灵,也能完成这个功能,但不是优化方法,也没有提高…

ENSP软件中DHCP的相关配置以及终端通过域名访问服务器

新建拓扑 配置路由器网关IP 设备配置命令&#xff1a;<Huawei> Huawei部分为设备名 <>代表当下所在的模式&#xff0c;不同模式下具有不同的配置权限<Huawei> 第一级模式&#xff0c;最低级模式 查看所有参数<Huawei>system-view 键入系统视图…

Python中的null是什么?

在知乎上遇到一个问题&#xff0c;说&#xff1a;计算机中的「null」怎么读&#xff1f; null正确的发音是/n^l/&#xff0c;有点类似四声‘纳儿’&#xff0c;在计算机中null是一种类型&#xff0c;代表空字符&#xff0c;没有与任何一个值绑定并且存储空间也没有存储值。 P…

STM32的独立看门狗详解

目录 1.独立看门狗是什么&#xff1f; 2.独立看门狗的作用 3.独立看门狗的实现原理 4.独立看门狗用到的寄存器 4.1 IWDG_KR &#xff08;关键字计时器&#xff09; 4.2 IWDG_PR&#xff08;预分频寄存器&#xff09; 4.3 IWDG_RLR&#xff08;重装载寄存器&#xff09…

程序的控制结构——if-else语句(双分支结构)【互三互三】

目录 &#x1f341; 引言 &#x1f341;if-else语句&#xff08;双分支结构&#xff09; &#x1f449;格式1&#xff1a; &#x1f449;功能&#xff1a; &#x1f449;程序设计风格提示&#xff1a; &#x1f449;例题 &#x1f449;格式2&#xff1a; &#x1f449;…

ENSP防火墙综合配置

综合拓扑&#xff1a; 实验要求&#xff1a; 要求一 生产区的安全策略配置 办公区的安全策略 要求二 生产区的安全策略 游客和办公区的安全策略 因为ISP返回的数据包会被防火墙最后的默认安全策略给拒绝&#xff0c;所以&#xff0c;把要ISP返回的数据给允许通过 要求三 增加…

《基于 Kafka + Flink + ES 实现危急值处理措施推荐和范围校准》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; 近期刚转战 CSDN&#xff0c;会严格把控文章质量&#xff0c;绝不滥竽充数&#xff0c;欢迎多多交流。&am…

location匹配的优先级和重定向

nginx的重定向&#xff08;rewrite&#xff09; location 匹配 location匹配的就是后面的uri /wordpress 192.168.233.10/wordpress location匹配的分类和优先级 1.精确匹配 location / 对字符串进行完全匹配&#xff0c;必须完全符合 2.正则匹配 ^-前缀级别&#xff…

【MYSQL】如何解决 bin log 与 redo log 的一致性问题

该问题问的其实就是redo log 的两阶段提交 为什么说redo log 具有崩溃恢复的能力 MySQL Server 层拥有的 bin log 只能用于归档&#xff0c;不足以实现崩溃恢复&#xff08;crash-safe&#xff09;&#xff0c;需要借助 InnoDB 引擎的 redo log 才能拥有崩溃恢复的能力。所谓崩…

Java毕业设计 基于SSM vue电影订票系统小程序 微信小程序

Java毕业设计 基于SSM vue电影订票系统小程序 微信小程序 SSM 电影订票系统小程序 功能介绍 用户 登录 注册 忘记密码 首页 图片轮播 电影信息 电影详情 评论 收藏 预订 电影资讯 资讯详情 用户信息修改 电影评价 我的收藏管理 用户充值 在线客服 我的订单 管理员 登录 个人…

sqlite 数据库 介绍

文章目录 前言一、什么是 SQLite &#xff1f;二、语法三、SQLite 场景四、磁盘文件 前言 下载 目前已经出到了&#xff0c; Version 3.46.0 SQLite&#xff0c;是一款轻型的数据库&#xff0c;是遵守ACID的关系型数据库管理系统&#xff0c;它包含在一个相对小的C库中。它是…

STM32-OC输出比较和PWM

本内容基于江协科技STM32视频内容&#xff0c;整理而得。 文章目录 1. OC输出比较和PWM1.1 OC输出比较1.2 PWM&#xff08;脉冲宽度调制&#xff09;1.3 输出比较通道&#xff08;高级&#xff09;1.4 输出比较通道&#xff08;通用&#xff09;1.5 输出比较模式1.6 PWM基本结…

批量制作word表格

问题背景 将excel表中的成绩内容制作为成绩单&#xff0c;每页对应一个学员的成绩&#xff0c;方便打印 代码实现 ## 导入包 import pandas as pd from docx import Document from docx.enum.text import WD_ALIGN_PARAGRAPH,WD_LINE_SPACING# 读取 Excel 内容 df pd.read_e…

docker基础知识以及windows上的docker desktop 安装

记录以供备忘 基础概念&#xff1a; 什么是docker 将程序和环境一起打包&#xff0c;以在不同操作系统上运行的工具软件 什么是基础镜像 选一个基础操作系统和语言后&#xff0c;将对应的文件系统、依赖库、配置等打包为一个类似压缩包的文件&#xff0c;就是基础镜像 什么是…

基于FPGA的数字信号处理(15)--定点数的舍入模式(6)向0取整fix

前言 在之前的文章介绍了定点数为什么需要舍入和几种常见的舍入模式。今天我们再来看看另外一种舍入模式&#xff1a;向上取整fix。 10进制数的fix fix&#xff1a;也叫 向0取整。它的舍入方式是数据往0的方向&#xff0c;舍入到最近的整数&#xff0c;比如1.75 fix到2&#xf…