C语言详解之一维数组二维数组以及变长数组

一周新的开始,今天的你学习了吗?

前言

今天打算把数组的相关知识知识复习一下,比如初始化,调用,以及他和指针的关系等等

数组是什么

数组是一种数据结构,它由相同类型的元素组成,并按照一定的顺序排列。每个元素在数组中都有一个唯一的索引,通过索引可以访问和操作数组中的元素。数组可以存储多个值,并且这些值可以是不同的数据类型,例如整数、浮点数、字符等。数组的大小在创建时就确定了,一旦确定就不能改变。

数组的特点

数组的特点是可以通过索引快速访问和修改元素,因为数组中的元素在内存中是连续存储的。数组还可以进行各种操作,如插入、删除、排序等。

一维数组

一维数组的定义

在C语言中,一维数组的构成由数据类型和数组名组合而成。例如,int类型的数组可以定义为int array[5],其中array是数组名,int是数据类型,5是数组的大小,[]是下标引用操作符,这个数组可以存储5个整数值。

    int arr[5];
    char arr[5];
    float arr[5];

一维数组元素的调用与修改

要知道数组每个元素都有对应的下标,从低地址向高地址依次是0,1,2,3……

如图所示(技术不好请多包涵)

 🦊当我们要使用第一个元素时只需要调用下标为0的元素即可

看,第一个元素被打印了出来

 🦊如果是要修改也是这样调用

看,第一个元素被改为了10

一维数组的初始化

 🔊 🔊 🔊完全初始化

给每个元素都赋值

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

 🔊 🔊 🔊不完全初始化

未被覆盖到的元素默认修改为0

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

二维数组

二维数组的定义

与一维数组十分相似,

int arr[3][4];

表示创建了一个3行4列的数组,元素是int类型

二维数组元素的调用

😴 🔊如下图所示,直接使用对应下标即可

但是,我们要知道二维数组在内存中存储的空间先线性连续的,

😴 🔊也就是这样

只是调用的时候按照二维来看而已

二维数组的初始化

👻完全初始化

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

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

第二种完全初始化是每个小括号是一行的元素

👻不完全初始化

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

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

第二种完全初始化是每个小括号是一行的元素

那么问题来了,下面两种写法一样,吗

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

请看

显然是不一样的,原因刚才也说了小括号里是一行的元素,不够就补零

变长数组

来历

 🔊 C99是C语言的一种标准,指的是1999年发布的C语言标准,也被称为ISO/IEC 9899:1999。它是C语言自1989年发布的C89(或ANSI C)标准之后的第二个主要更新版本。C99引入了一些新特性,就包括变长数组。

在c99之前数组大小是用常量指定的,c99后引入了变长数组的概念

变长数组(Variable Length Array,VLA)是一种在创建数组时可以使用变量指定数组长度的数组。与普通数组不同,变长数组的大小在创建后保持不变。变长数组只能是局部变量,并且必须是自动存储类别,不能使用extern或static存储类别说明符。

要说明的是一些IDE不是很好的支持c99,例如vs,他就不能使用变长数组

变长数组的使用

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

变长数组的特点

  1. 变长数组的长度可以使用变量来指定,而不仅限于常量或常量表达式。
  2. 变长数组不能在定义时进行初始化,需要在运行时动态分配内存。
  3. 变长数组本质上是静态数组,即数组的长度在变量的整个生命周期中是不可变的。
  4. 变长数组分配在栈上,因此只能是局部变量。
  5. 变长数组适用于多维数组。

 🔊根本特征

变长数组只有在运行时才可以确定大小,根据变量大小指定元素个数,确定后不在变换。

这里插一嘴,在动态内存分配里有个和它像的东西叫做柔性数组,感兴趣的可以去了解一下。

 🦊今天的分享就到这里了,觉得有帮助的话就点个赞支持一下吧!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring学习 Spring AOP

4.Spring AOP 4.1.为什么要学习AOP? 案例:有一个接口Service有一个addUser方法,在调用addUser(被调用时打印调用前的毫秒数与调用后的毫秒数),其实现为: Service public class UserServiceImpl implements UserServi…

机器学习 前馈神经网络

人工神经网络(Artificial Neural Network,ANN)是指一系列受生物学和神经科学启发的数学模型.这些模型主要是通过对人脑的神经元网络进行抽象,构建人工神经元,并按照一定拓扑结构来建立人工神经元之间的连接…

【Vue3】2-5 : 指令系统与事件方法及传参处理

本书目录:点击进入 一、标签属性中的使用 - 指令系统 1.1 那么模板语法是否可以在标签属性中进行使用呢? ▶ 当然可以:使用 指令系统 二、指令系统 2.1 v-bind 2.2 v-on 三、实战 3.1 methods 选项 3.2 $event语法 一、标签属性中的使用 - 指令…

服务发现Discovery

对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息 1、 修改cloud-provider-payment8001的controller import com.my.springcloud.utils.RestResponse; import com.my.springcloud.entities.Payment; import com.my.springcloud.service.PaymentSe…

文档审阅批注的合并和对比

#创作灵感# 最近在改论文,Feedback返回的时候,把之前的批注都删了,这就增加了工作量,看起来不方便,所以就需要将删掉的批注全部复原。 那在原来的文档重新在修改一遍,工作量还是很大的,所以这里…

java中的语法糖,你了解多少?

什么是语法糖 语法糖是一种编程语言的特性,通常是一些简单的语法结构或函数调用,它可以通过隐藏底层的复杂性,并提供更高级别的抽象,从而使代码更加简洁、易读和易于理解。但它并不会改变代码的执行方式。 语法糖优势 1. 简化代…

Turn.js 实现翻书效果

接到了任务,要把孩子画的画放到网页上去,翻页效果还要逼真一点。搜索到了turn.js这个前端翻页组件,效果不错。先上图看效果。 网页实际效果:星月夜诗集 turn.js的官网地址:Turn.js: The page flip effect in HTML5 …

内存映射-进程通信

内存映射(mmap) 1. 创建内存映射区 实现进程间通信,还可以通过函数创建一块内存映射区,和管道不同的是管道对应的内存空间在内核中,而内存映射区对应的内存空间在进程的用户区(用于加载动态库的那个区域)&#xff0c…

1.4号io网络

1.多进程 引入目的:让多个任务实现并发执行 并发执行:同一时间只有一个进程执行,通过时间轮询调度多个进程,由于时间每个进程所用时间极短,所以宏观表现为多个进程同时进行。 并行执行:多个任务器执行多…

【Python】Graphviz的安装和使用

graphviz包可以用来决策树可视化,只安装包之后直接import使用会报错,因为graphviz是一个要单独安装的软件。 下载路径:Download | Graphviz 有不同的版本,我这里用的是最新版 9.0版本安装之后可以选自动添加到环境变量——系统…

LeetCode刷题12:贪心算法解决1402.做菜顺序

一个厨师收集了他 n 道菜的满意程度 satisfaction ,这个厨师做出每道菜的时间都是 1 单位时间。 一道菜的 「 like-time 系数 」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜的满意程度,也就是 time[i]*sa…

[De1ctf 2019]SSRF Me

目录 具体做题分析: 字符串拼接: 哈希拓展攻击: 点开是一段flask代码,经过还原后格式如下: #!/usr/bin/env python# encodingutf-8from flask import Flask, requestimport socketimport hashlibimport urllibimpo…

pod节点jar包替换流程

1、查找到该docker容器 docker ps | grep backend # ./entrypoint.sh文件启动的那个容器2、替换jar 包 mv xxx.jar app.jar docker cp app.jar 66bc6fea9fb5:/home/aimind/3、重启容器 docker restart 66bc6fea9fb5 4、重启容器后进行功能验证 功能验证没问题了,再…

决策树--CART回归树算法详解

1、介绍 (1)简介 CART(Classification and Regression Trees)回归树是一种基于决策树的机器学习算法,用于预 测连续型目标变量而不是离散型类别变量。 (2)生成过程 ① 选择一个特征和相应的…

在win10上cuda12+tensorrt8.6+vs2019环境下编译paddle2.6生成python包与c++推理库

paddle infer官方目前没有发布基于cuda12的c库,为此参考https://www.paddlepaddle.org.cn/inference/user_guides/source_compile.html实现cuda12的编译安装,不料博主才边缘好自己的paddle2.6,paddle官方已经发布了cuda12.0的paddle2.6框架。…

全视通发表“物联网赋能智慧医院建设”主题演讲获关注

邕州山河,神州沃壤。近日,备受瞩目的“2024广西医院和实验室建设学术年会暨净化专业委员会成立六周年庆典”在广西南宁圆满召开。作为智慧医康养整体方案提供商,全视通受邀参会并发表了主题为“物联网赋能智慧医院建设”的演讲,深…

1873_ssh scp的速度限制设置

全部学习汇总: GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 正常情况下,我们对于传输速度的要求自然是越快越好。不过凡事也有一个例外,比如我遇到的一个场景:经过了内网穿透的环境&a…

Web前端篇——ElementUI之el-scrollbar + el-backtop + el-timeline实现时间轴触底刷新和一键返回页面顶部

ElementUI之el-scrollbar el-backtop el-timeline实现时间轴触底刷新和一键返回页面顶部。 背景:ElementUI的版本(vue.global.js 3.2.36, index.css 2.4.4, index.full.js 2.4.4) 废话不多说,先看动…

卷积神经网络|猫狗分类系列--导入kaggle猫狗数据集

解决任何真实问题的重要一步是获取数据,Kaggle提供了大量不同数据科学问题的竞赛。 我们将从 https://www.kaggle.com/competitions/dogs-vs-cats/data 下载猫狗数据集,并对其进行一定的操作,以正确的导入到我们的计算机,为接下…

python+playwright 学习-1.环境准备与快速开始

前言 说到 web 自动化,大家最熟悉的就是 selenium 了,selenium 之后又出现了三个强势的框架Puppeteer、CyPress、TestCafe, 但这3个都需要掌握 JavaScript 语言,所以只是少部分人在用。 2020年微软开源一个 UI 自动化测试工具 P…