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. 变长数组适用于多维数组。

 🔊根本特征

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

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

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

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

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

相关文章

burp靶场-path traversal

路径遍历 1.路径遍历漏洞 ### 什么是路径遍历 路径遍历也称为目录遍历。这些漏洞使攻击者能够读取正在运行应用程序的服务器上的任意文件。这可能包括&#xff1a; 应用程序代码和数据。 后端系统的凭据。 敏感的操作系统文件。### <img src"/loadImage?filename218…

springCould中的Stream-从小白开始【12】

&#x1f95a;今日鸡汤&#x1f95a; 见过一些人&#xff0c;他们朝九晚五&#x1f62d;&#xff0c;有时也要加班&#xff0c;却能把生活过得很&#x1f60e;有趣。他们有自己的爱好&#xff0c;不怕独处。他们有自己的坚持&#xff0c;哪怕没人在乎。&#x1f926;‍♂️ 开心…

FASTQ 文件压缩格式有哪些?

FASTQ 文件压缩格式 .gz .bz2 .xz .rfq .rfq.xz FASTQ 文件是用于存储测序数据的一种格式&#xff0c;它包含了大量的文本信息&#xff0c;因此通常占用大量的存储空间。为了有效地处理和传输这些数据&#xff0c;通常需要对 FASTQ 文件进行压缩来节省存储空间及传输带宽。以下…

Qt点击按钮在其附近弹出一个窗口

效果 FS_PopupWidget.h #ifndef FS_POPUPWIDGET_H #define FS_POPUPWIDGET_H#pragma once#include <QToolButton> #include <QWidgetAction> #include <QPointer>class QMenu;class FS_PopupWidget : public QToolButton {Q_OBJECTpublic:FS_PopupWidget(QW…

PXE 高效批量网络装机

前提&#xff1a; 虚拟机恢复到初始化 调整网卡为vm1 关闭防火墙 安全linux systemctl stop firewalld vim /etc/selinux/config 配置IP地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33 重启网卡 systemctl restart network 挂载磁盘 安装yum源 安装服务 yum install vs…

Redis相关命令详解及其原理

Redis概念 Redis&#xff0c;英文全称是remote dictionary service&#xff0c;也就是远程字典服务。这是kv存储数据库。Redis&#xff0c;包括所有的数据库&#xff0c;都是请求-回应模式&#xff0c;通俗来说就是数据库不会主动地要给前台推送数据&#xff0c;只有前台发送了…

美团2024届秋招笔试第一场编程真题(js版本)

1.小美的外卖订单 简单的加法逻辑&#xff0c;需要注意的是各个数据的边界问题 折扣价不能超过原价减的价格不能超过满的价格满减优惠仅限原价购入 const rl require("readline").createInterface({ input: process.stdin }); void (async function () {let count…

ENVI5.6版本中规则与不规则图像裁剪操作

图像裁剪的目的是将研究之外的区域去除&#xff0c;常用的是按照行政区划边界或自然区划边界进行图像的裁剪&#xff0c;在基础数据生产中&#xff0c;还经常要做标准分幅裁剪。按照ENVI的图像裁剪过程&#xff0c;可分为规则裁剪和不规则裁剪。 ENVI5.6之前版本的图像裁剪工具…

linux基础学习(3):挂载

挂载可以理解为给磁盘空间一个可访问的入口&#xff0c;那个入口称为挂载点&#xff0c;相当于windows中的盘符。 1.挂载命令mount 1.1直接输入mount 查看系统已挂载的设备 1.2挂载与卸载命令 mount -t 文件系统名 设备文件名 挂载点 | umount 挂载点 或 umount 设…

衡水学院新人真题百练2022(1-20)修订版

​ 1 重要的话说三遍 分数 5 作者 陈越 单位 浙江大学 这道超级简单的题目没有任何输入。 你只需要把这句很重要的话 —— “I’m gonna WIN!”——连续输出三遍就可以了。 注意每遍占一行&#xff0c;除了每行的回车不能有任何多余字符。 #include<stdio.h> int…

QT-day6

作业1&#xff1a;数据库增删查改 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);if (!db.contains("stu.db")){db QSqlDatabase::addDatabase(&q…

The Plant cell:DAP-seq技术助力揭示BBR/BPC家族的MdBPC2转录因子调控苹果生长素的生物合成从而促进苹果生长及矮化

植物生长素&#xff08;IAA&#xff09;在植物生长发育过程中起着重要的作用。其化学本质是吲哚乙酸。主要作用是使植物细胞壁松弛&#xff0c;从而使细胞生长伸长&#xff0c;在许多植物中还能增加RNA和蛋白质的合成。 目前BARLEY B RECOMBINANT/BASIC PENTACYSTEINE (BBR/BP…

Unity对应SDK和NDK版本的对照表

官网&#xff1a;Unity - Manual: Android environment setup 本人安装的是2022版本长期支持版本2022.3.15f1c1 安装Java的JDK环境就不在这里展开了&#xff0c;就记录下对Android SDK的设置&#xff0c;要与Unity的版本对应&#xff0c;否则会出现很多莫名奇妙的问题。 打开…

自定义vector的实现

实现前需要思考的一个问题 为什么需要将空间的申请与对象的构建分开 查看vector的模板参数时可以看到其有第三个参数是空间适配器allocator&#xff0c;查找其对外提供的成员函数不难发现它的实现逻辑是将空间的申请与对象的构建分开的&#xff0c;为什么呢&#xff1f;不弄清…

SpringBoot异常处理(Whitelabel Error Page和自定义全局异常处理页面)和整合ajax异常处理

SpringBoot异常处理&#xff08;Whitelabel Error Page和自定义全局异常处理页面&#xff09;和整合ajax异常处理 1、springboot自带的异常处理页面Whitelabel Error Page SpringBoot默认的处理异常的机制&#xff1a;SpringBoot 默认的已经提供了一套处理异常的机制。一旦程…

MongoDB 索引管理

文章目录 前言1. 术语介绍1.1 index / key1.2 Coverd Query1.3 IXSCAN / COLLSCAN1.4 Selectivity1.5 Index Prefix 2. 索引原理3. 索引的维护3.1 创建索引语法3.2 单字段索引3.3 多字段复合索引3.4 数组的多列索引3.5 全文索引3.6 Hash 索引3.7 TTL 索引3.8 删除索引3.9 后台创…

基于springboot书籍学习平台源码和论文

首先,论文一开始便是清楚的论述了平台的研究内容。其次,剖析平台需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确平台的需求。然后在明白了平台的需求基础上需要进一步地设计平台,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

MongoDB安装与基本使用

一、简介 1.1 Mongodb 是什么 MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 https://www.mongodb.com/ 1.2 数据库是什么 数据库&#xff08; DataBase &#xff09;是按照数据结构来组织、存储和管理数据的 应用程序 1.3 数据库的作用 数据库的…

创建React步骤

确保电脑已经安装了node.js以后&#xff0c;打开终端进入目标文件夹 cd xxx(文件夹 npx create-react-app react01(替换为你自己的react名称) 可能会出现是否安装xxx,输入y即可 没有报错信息后&#xff0c;输入 cd react01 npm start 会自动跳转到react界面&#xff0c;就…