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

news2024/9/24 1:22:30

目录

  • 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.coloradmin.cn/o/1906329.html

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

相关文章

C语言求10进制转2进制(除2取余法)

1.思路:除2取余法,也就是说用除以2取余来将10进制数转换为二进制 2.两种代码实现,这里用了两,一个递归一个非递归。 递归是一种编程技术,其中一个函数直接或间接地调用自己。递归通常用于解决那些可以被分解为更小的、…

QCC5181 歌词歌曲名多国语言显示替代QCC5125 CSR8675

QCC518X作为Qualcomm新一代蓝牙技术芯片,支持最新蓝牙协议V5.4,较QCC512X系列,它有更强大的DSP、CPU。除支持USB、I2S、SPDIF等接口外,还扩展了LE Audio功能,扩展支持AptX Lossless。以5181为例,我们还扩展…

Pandas 学习笔记(四)--CSV文件

CSV文件 CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。 读取与写入 读取csv文件 i…

智能充电(新能源电动车,电单车)云管理系统的定制解决方案

一 系统简介 智能充电(新能源电动车,电单车)云管理系统 是一套能够实现对充电站/桩的实时通讯、状态监控、故障检测、运营分析、数据统计、策略设置的智能化多任务管理系统。 二 平台概览 智能充电云管理系统 https://chongdianzhuang.itg…

C# CvDnn部署CoupledTPS实现旋转图像矫正

C# CvDnn部署CoupledTPS实现旋转图像矫正 目录 说明 效果 模型信息 项目 代码 下载 说明 TPAMI2024 - Semi-Supervised Coupled Thin-Plate Spline Model for Rotation Correction and Beyond github地址:https://github.com/nie-lang/CoupledTPS 代码实现…

【SpringCloud应用框架】Nacos命名空间、分组和DataID三者关系

第五章 Spring Cloud Alibaba Nacos之命名空间、分组和DataID三者关系 文章目录 一、名词解释三者关系 二、切换不同环境DataID方案Group方案Namespace空间方案 一、名词解释 命名空间(Namespace) ​用于进行租户粒度的配置隔离。不同的命名空间下&…

C++ 智能指针使用不当导致内存泄漏问题

shared_ptr相互嵌套导致循环引用 代码示例 #include <iostream> #include <memory> using namespace std;class B;class A { public:std::shared_ptr<B> b_ptr;~A() { std::cout << "A destroyed\n"; } };class B { public:std::shared_pt…

优选算法之技巧(一):双指针一:移位0与复写0

引用&#xff1a;我们之前学过快排&#xff0c;首先用三元取中&#xff0c;找(key)&#xff0c;然后就用到了双指针的方法来进行交换排序&#xff0c;那我们今天要讲的双指针其实大同小异&#xff0c;无非在数组中就变成了下标。 题一&#xff1a; 给定一个数组 nums&#xf…

云平台教程 | 手把手教你主成分分析PCA的可视化

爱基百客云平台小工具使用 1.1 爱基百客云平台之PCA分析 1.2 PCA分析原理 1.3 参数设置 1.4 任务查看 1.5 结果 1.5.1 PCA图 01 爱基百客云平台小工具使用 首先&#xff0c;打开爱基百客官网&#xff1a;http://www.igenebook.com&#xff1b;点击菜单栏最右侧“云平台”按钮…

藏汉翻译通工具推荐使用《藏文翻译词典》App:藏族文化的掌上宝典,帮助你了解学习藏语反义词近义词和藏文作文!

如果你正在学习藏语&#xff0c;遇到不同地区的发音不同时&#xff0c;卫藏语、安多语和康巴语&#xff0c;那么你需要一款好用的翻译和语音朗读工具&#xff0c;帮助你掌握藏语。 如果你正在用藏文写作文&#xff0c;发现一些词汇不会时&#xff0c;需要使用藏文词典&#xf…

盘点效率工具RunFlow那些容易被忽略的功能

本文我们将带您了解RunFlow有哪些容易被忽略、但是又非常实用的功能。 固定工作窗口 您还可以通过双击 Ctrl 键来切换窗口固定状态&#xff0c;您也可以在 热点事件 设置页面自定义该快捷键。 预览菜单内容 用浏览器打开剪贴板复制的URL 多行输入 按 CtrlEnter 或 ShiftEnter …

C语言 -- 深入理解指针(二)

C语言 -- 深入理解指针&#xff08;二&#xff09; 1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组8. 字符指针变量9. 数组指针变量2.1数组指针变量是什么&#xff1f;2.2 数组指针变量怎么初始化 10. 二维…

海外媒体发稿-全媒体百科

全球知名媒体机构 在全球范围内&#xff0c;有许多知名的新闻机构负责报道世界各地的新闻事件。以下是一些国外常见的媒体机构&#xff1a; AP&#xff08;美联社&#xff09;合众国际社&#xff08;UPI&#xff09;AFP(法新社)EFE&#xff08;埃菲通讯社&#xff09;Europa …

【vue】下载 打印 pdf (问题总结)- 持续更新ing

这里是目录标题 一、pdf1.查看 下载一、pdf 1.查看 下载 样式 Code<template><div><el-table :data="pdfList" style="width: 100%" border ><el-table-columnprop="index"label="序号"width="80"ali…

JVM:介绍

文章目录 一、什么是JVM二、JVM的功能1、解释和运行2、内存管理3、即时编译 三、常见的JVM四、Java虚拟机规范五、HotSpot发展历程 一、什么是JVM JVM的全称为Java Virtual Machine&#xff0c;Java虚拟机。本质上是一个运行在计算机上的程序&#xff0c;职责是运行Java字节码…

气膜体育馆作为临时赛场有哪些优势—轻空间

一、气膜体育馆简介 气膜体育馆是一种利用气膜技术建造的室内场馆&#xff0c;其结构主要由高强度膜材、充气系统和钢缆固定系统组成。通过向膜体内部充气&#xff0c;使其形成稳定的内部压力来支撑整个建筑结构。气膜体育馆因其快速建设、环保节能、灵活多样等优点&#xff0c…

tqdm进度条函数使用 python

1.作用&#xff1a; 通过使用 tqdm &#xff0c;可以让您在处理大量数据或长时间运行的循环时&#xff0c;更好地了解程序的执行进度&#xff0c;增强用户体验。 2.使用 ---可以使用 pip install tqdm 进行安装。 ---tqdm.tqdm(iterator可迭代对象&#xff0c;desc描述符&…

数据中台设计书及建设指南(中台及大数据解决技术方案)

1. 中台概念 2. 推动企业组织模式演进 3. 建设方法 4 .中台内容 5. 数据安全体系 中台内容围绕数据中台建设评估、整体框架、数据采集&#xff0c;结构化、半结构化、非结构化的数据采集&#xff0c;数据计算能力、存储计算引擎、数据架构、数据挖掘、各种不同数据层建设、模型…

7月8号直播预告 | 全国产EtherCAT运动控制器ZMC432HG及其EtherCAT驱动器与控制器常用回零模式介绍

EtherCAT运动控制边缘控制器是工业互联网的关键组件之一&#xff0c;结合丰富的运动控制功能、实时数据采集、处理和本地计算等&#xff0c;具备高度灵活的可编程性和出色的运动控制性能&#xff0c;为运动控制协同工业互联网应用带来巨大市场潜力&#xff0c;同时也使其成为企…

spark shuffle写操作——SortShuffleWriter

写入的简单流程&#xff1a; 1.生成ExternalSorter对象 2.将消息都是插入ExternalSorter对象中 3.获取到mapOutputWriter&#xff0c;将中间产生的临时文件合并到一个临时文件 4.生成最后的data文件和index文件 可以看到写入的重点类是ExternalSorter对象 ExternalSorter 基…