重生之我在异世界学编程之C语言:初识一维和二维数组篇

大家好,这里是小编的博客频道
小编的博客:就爱学编程

很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!!

本文目录

  • 引言
  • 正文
    • 数组的基本类型:一维数组和多维数组
    • 一 初识一维数组
      • (1)一维数组的创建:
      • (2)一维数组的初始化:
        • 1.部分初始化:
        • 2.全部初始化:
          • 这样我们就对这四个数组中的第一个元素和全部元素进行了初始化,值得注意的是:如果我们没有对数组中的元素进行初始化或只初始化了部分的元素,编译器会自动帮我们初始化其他没被初始化的元素,初始化规则是:
      • (3)一维数组类型:
    • 二 一维数组的使用
      • (1)数组的下标:
    • 三 数组在内存中的存储:
    • 四 变长数组:
    • 五 sizeof运算符和strilen函数计算数组长度的区别(易错点)
      • (1)sizeof运算符
      • (2)strlen函数
    • 六 初识二维数组
      • (1)二维数组的创建:
      • (2)二维数组的初始化:
    • 七 二维数组在内存中的储存:
    • 八 二维数组的使用:
  • 快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!!

引言

在C语言中,数组是一种非常重要的数据结构,它允许我们存储固定大小的同类型元素集合。通过使用数组,我们可以方便地处理大量数据,提高程序的效率和可读性。数组的类型分为一位数组和二维数组,还有多维数组,而今天小编将要给大家介绍的是数组的相关知识。一起来看看吧!!!

在这里插入图片描述


那接下来就让我们开始遨游在知识的海洋!

正文

数组的基本类型:一维数组和多维数组

一 初识一维数组

(1)一维数组的创建:

格式为:元素类型 数组名[元素个数]
例:

         int  arr[10];char   arr[10];float  arr[10];bool   arr[10];
这样我们就创建了四个元素个数均为10个的整形数组,字符数组,浮点型数组,布尔型数组。

(2)一维数组的初始化:

1.部分初始化:
       int arr[10]={0};char arr[10]={'0'};float arr[10]={0.0};bool arr[10]={false};
2.全部初始化:
    int arr[10]={1,2,3,4,5,6,7,8,9,10};
这样我们就对这四个数组中的第一个元素和全部元素进行了初始化,值得注意的是:如果我们没有对数组中的元素进行初始化或只初始化了部分的元素,编译器会自动帮我们初始化其他没被初始化的元素,初始化规则是:

元素类型为整型就初始化为整数0;
元素类型为字符型就初始化为字符’0’;
元素类型为浮点型就初始化为浮点数0.0;
元素类型为布尔型就初始化为0对应的false(假);

(3)一维数组类型:

格式为:元素类型 [元素个数]
例:

int[10];

数组去掉数组名剩下来的就是数组的类型这也适用于多维数组
由此可见类型一样,数组未必是同一个数组

二 一维数组的使用

(1)数组的下标:

数组的下标是从0开始的

例:

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

所以我们要输入一维数组各元素的值,如果采用for循环的方式,就得将括号里定义的变量初始化为0;或者我们想将一维数组中各元素的值全部打印出来,如果采用for循环的方式,同前。
例:

printf("请输入: \n");
for(int i=0;i<10;i++)
{scanf("%d",&arr[i]);
}
printf("\n");
for(int i=0;i<10;i++)
{printf("%d ",arr[i]);
}
printf("\n");

运行结果为:

在这里插入图片描述

三 数组在内存中的存储:

元素在内存中的存储是连续的,也就是紧挨着的,这里不做过多讨论。

四 变长数组:

在c99中引入了变长数组的概念,就是元素个数可以用变量表示的数组

例:

int arr[n];
scanf("%d",&n);

变长数组的好处就是数组的长度可以由自己输入确定,但也要注意变长数组不可以初始化
如果想要初始化一个长度可以由自己改变的数组,则就要使用符号常量

例:

#define  PI   10
int  arr[PI]={0};

五 sizeof运算符和strilen函数计算数组长度的区别(易错点)

(1)sizeof运算符

求字节长度的运算符整形占4个字节,字符型占1个字节,双精度型占8个字节,单精度型占4个字节。
格式:
sizeof(数据类型);

(2)strlen函数

专门求字符串长度的函数,也可以是单个字符。
格式:
strilen(字符串);

易错题:
题目:下列代码执行的结果是什么?

char arr1[]={"hello,bite!"), arr2={'h','e','l','l','o',',','b','i','t','e','!'};
printf("%d %d",sizeof(arr1),sizeof(arr2));
printf("%d %d",strlen(arr1),strlen(arr2));

运行的结果是:
在这里插入图片描述
注意:22是随机值,是取决于编译器;
原因是:字符串后隐藏了一个’\0’字符,表示字符的结束。(‘\0’的ASCLL值为0)strlen求的是字符串长度,从首元素开始计算,遇见‘\0’停止(但不包括\0),由于arr2组没有’\0‘,所以strlen(arr2的结果是个随机值。

六 初识二维数组

(1)二维数组的创建:

格式:元素类型 数组名[行数][列数]
例:

int arr[2][3];

注意:二维数组的行数可以省略,但列数不可省略。
例:

int arr[][3];

(2)二维数组的初始化:

1.顺序初始化:与一维数组同理
例:

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

初始化结果为

arr[0][0]=1;
arr[0][1]=2;
arr[0][2]=3;
arr[1][0]=4;
arr[1][1]=5;
arr[1][2]=6;

2.指定初始化:
例:

int arr[2][3]={{12}{34}}

初始化结果为:

arr[0][0]=1;
arr[0][1]=2;
arr[0][2]=0;
arr[1][0]=3;
arr[1][1]=4;
arr[1][2]=0;

七 二维数组在内存中的储存:

和一维数组一样,二维数组在内存中的储存也是连续的,也就是紧挨着的,且是一行一行挨着的,前一行的末尾挨着后一行的开头。

  • 总的来说,C语言的二维数组在内存中是以连续的方式存储的,这使得它们非常适合于需要快速访问和修改大量数据的场景。

八 二维数组的使用:

二维数组的下标也是从零开始,其输入和输出均用两个for循环就可完成,同样括号中的变量也从零开始

例:

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

快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!!

                                    .

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

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

相关文章

Ubuntu 新加硬盤分區

1. 查看系統是否識別新的硬盤 lsblk 假設硬盤的名字為&#xff1a;sudo fdisk /dev/sda 注意硬盤類型為gpt&#xff0c;大小沒有限制 2. 硬盤分區 sudo fdisk /dev/sda 根據提示&#xff1a; n 新加分區&#xff0c;設置分區大小。 p 查看分區情況以及大小 d: 刪除也…

openGauss开源数据库实战十六

文章目录 任务十六 openGauss逻辑结构:触发器管理任务目标实施步骤一、测试openGauss的触发器1.创建测试表2.创建触发器对应的函数3.创建触发器4.测试触发器 二、触发器的类型1.行级触发器2.语句级触发器3.AFTER触发器和 BEFORE触发器 任务十六 openGauss逻辑结构:触发器管理 …

键值对形式读取值

效果 学习啦&#xff01; 异步请求数据方法&#xff1a; ①async/await <script setup> import { nextTick, onMounted } from vuelet Info {}const loadData async () > {try {const response await fetch(/json/info.json)const data await response.json()data…

Java面向对像编程OOP

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 OOP总结&#xff1a; 类和对象的说明Java中有无static修饰的方法的使用区别&#xff1a;✅️有stat…

【MARL】MAT论文阅读笔记

文章目录 前言一、如何产生这个想法(TRPO -> ) PPO -> MAPPO -> HAPPO -> MAT 二、多智能体优势值分解定理三、transformer 在MAT的应用四、伪代码简述五、实验效果 前言 正好有节课让我们调研最新的自己的方向的新论文&#xff0c;找到一篇自己觉得比较可行&…

深度学习模型——双塔模型(Two-Tower Model)详解

双塔模型是一种高效、灵活的深度学习模型结构&#xff0c;广泛用于推荐系统和信息检索等场景中。其核心思想是分别为两个实体&#xff08;如用户和物品、查询和文档&#xff09;构建独立的特征表示网络&#xff08;两座塔&#xff09;&#xff0c;并在共享语义空间中通过相似性…

回溯里面的基本概念

1.深度优先遍历和深度优先搜索&#xff08;DFS) 深度优先遍历 主要思路是从图中一个未访问的顶点 V 开始&#xff0c;沿着一条路一直走到底&#xff0c;然后从这条路尽头的节点回退到上一个节点&#xff0c;再从另一条路开始走到底...&#xff0c;不断递归重复此过程&#xff…

LeetCode 热题100(十五)【动态规划】(3)

15.7最长递增子序列&#xff08;中等&#xff09; 题目描述&#xff1a;leetcode链接 300. 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元…

springboot如何集成工作流审批流,流程设计器集成,业务表单和工作流绑定,详细步骤和实际案例参考(源码)

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;一套完整并且实际运用在多套项目中的案例&#xff0c;满足日常业务流程审批需求。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行的前后端…

02_Node.js模块化

02_Node.js模块化 知识点自测 以下代码运行的结果是多少&#xff1f; const arr [10, 20, 30] const result arr.map(val > val 1).reduce((sum, val) > sum val, 0) console.log(result) A&#xff1a;60 B&#xff1a;63 <details><summary>答案</…

vulnhub kioptirx1.2 超详细wp

探测 nmap --min-rate 10000 -p- 192.168.128.134 最小速率10000 nmap -sT -sV -sC -O 192.168.128.134 web打点 无弱口令 暴露cms寻找exp searchsploit LotusCMS -m 16982 [输入id号和参数m可以直接把东西复制到当前目录] 查看txt里面发现 都是xss没有rce github搜索到一个…

vulnhub靶场之【grotesque】三

前言 靶机&#xff1a;grotesque-3 192.168.1.44 攻击 &#xff1a;kali 192.168.1.16 都是虚拟机环境&#xff0c;桥接模式 主机发现 使用arp-scan -l或者netdiscover -r 192.168.1.1/24搜索 信息收集 使用nmap扫描 防止有遗漏&#xff0c;再扫描全端口 网站信息收集 …

大规模模型部署、推理的工具:Xinference

有没有 Xinference之前&#xff0c;如果想要部署应用一个开源模型&#xff0c;可能会面临以下一些情况和挑战&#xff1a; 自行开发推理框架&#xff1a; 需要投入大量的时间和精力来构建一个可靠且高效的推理框架&#xff0c;包括处理模型加载、资源管理、请求调度等复杂的任务…

C语言选择法排序

C语言编程&#xff0c;用选择法对数组中4个整数按由大到小排序 1、代码如下&#xff1a; #include<stdio.h> #include<math.h> #include<string.h>int main() {void sort(int array[],int n);printf("测试开始\n");int nums[] {2,3,4,1};sort(n…

SpringBoot的validation参数校验

文章目录 前言一、引入validation 依赖二、validation中的注解说明 &#xff08;1&#xff09;Validated&#xff08;2&#xff09;Valid&#xff08;3&#xff09;NotNull&#xff08;4&#xff09;NotBlank&#xff08;5&#xff09;NotEmpty&#xff08;6&#xff09;Patte…

Go的Gin比java的Springboot更加的开箱即用?

前言 隔壁组的云计算零零后女同事&#xff0c;后文简称 云女士 &#xff0c;非说 Go 的 Gin 框架比 Springboot 更加的开箱即用&#xff0c;我心想在 Java 里面 Springboot 已经打遍天下无敌手&#xff0c;这份底蕴岂是 Gin 能比。 但是云女士突出一个执拗&#xff0c;非我要…

docker学习笔记(四)--DockerFile

文章目录 一、什么是Dockerfile二、docker build命令三、dockerfile指令3.1 FROM3.2 ENV3.3 WORKDIR3.4 RUN3.5 CMD3.6 ENTRYPOINT3.7 EXPOSE3.8 ARG3.9 ADD3.10 COPY3.11 VOLUME 四、dockerfile示例 一、什么是Dockerfile Dockerfile 是用于构建 Docker 镜像的脚本文件&#…

撰写技术文档的关键步骤和核心要点

编写项目的技术文档是一个重要且细致的任务&#xff0c;它不仅有助于项目的当前开发团队理解系统的结构和工作原理&#xff0c;还为未来的维护和扩展提供了宝贵的参考资料。以下是撰写技术文档时应遵循的几个关键步骤和组成部分&#xff1a; 1. 概述 项目简介&#xff1a;简要…

Ant-Design-Vue 全屏下拉日期框无法显示,能显示后小屏又位置错乱

问题1&#xff1a;在全屏后 日期选择器的下拉框无法显示。 解决&#xff1a;在Ant-Design-Vue的文档中&#xff0c;很多含下拉框的组件都有一个属性 getPopupContainer可以用来指定弹出层的挂载节点。 在该组件上加上 getPopupContainer 属性,给挂载到最外层盒子上。 <temp…

【前端学习路线】(超详细版本)

先附上学习路线图&#xff1a;前端学习路线 第一阶段&#xff1a;前端入门&#xff08;htmlcss&#xff09; 前端最基本的知识&#xff0c;需要先将这些内容融汇贯通&#xff0c;学习后面内容才会不吃力。学习完可以做几个静态页练习一下。 推荐视频学习链接&#xff1a; 黑马程…