【C语言】4.C语言数组(2)

文章目录

  • 6. 二维数组的创建
    • 6.1 ⼆维数组的概念
    • 6.2 ⼆维数组的创建
  • 7. 二维数组的初始化
    • 7.1 不完全初始化
    • 7.2 完全初始化
    • 7.3 按照⾏初始化
    • 7.4 初始化时省略⾏,但是不能省略列
  • 8. 二维数组的使用
    • 8.1 ⼆维数组的下标
    • 8.2 ⼆维数组的输⼊和输出
  • 9. 二维数组在内存中的存储
  • 10. C99中的变长数组
  • 11. 数组练习


6. 二维数组的创建

6.1 ⼆维数组的概念

如果我们把一维数组做为数组的元素,这时候就是二维数组。二维数组以上的数组统称为多维数组。

在这里插入图片描述

也就是说可以理解成二维数组就是由多行一维数组组成的。


6.2 ⼆维数组的创建

二维数组语法:

type arr_name[常量值1][常量值2];

举个例子:

int arr[3][5];

3表示数组有3行

5表示每一行有5个元素,也可以理解成5列

int 表示数组的每个元素是整型类型

arr 是数组名,可以根据自己的需要指定名字


7. 二维数组的初始化

7.1 不完全初始化

int arr1[3][5] = {1,2};
int arr2[3][5] = {0};
在这里插入图片描述在这里插入图片描述

7.2 完全初始化

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


7.3 按照⾏初始化

在这里插入图片描述

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

7.4 初始化时省略⾏,但是不能省略列

在这里插入图片描述

int arr5[][5] = {1,2,3};
int arr6[][5] = {1,2,3,4,5,6,7};
int arr7[][5] = {{1,2}, {3,4}, {5,6}};

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


8. 二维数组的使用

8.1 ⼆维数组的下标

二维数组是有行和列的,只要锁定了行和列就能唯一锁定数组中的元素.

在这里插入图片描述

第一行蓝色的数字表示列号,第一列蓝色数字表示行号。

都是从0开始的。

arr[0][0]=1

arr[1][2]=8


8.2 ⼆维数组的输⼊和输出

如何访问整个二维数组?

#include <stdio.h>
int main()
{
    int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
    int i = 0;

    for (i = 0; i < 3; i++) //产生行号
    {
        int j = 0;
        for (j = 0; j < 5; j++) //产生列号
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

打印:

在这里插入图片描述

如果想改变整个数组的元素,并且打印的话就这样:

#include <stdio.h>
int main()
{
    int arr[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    int i = 0;

    for(i=0; i<3; i++) //产生行号
    {
        int j = 0;
        for(j=0; j<5; j++) //产生列号
        {
            scanf("%d", &arr[i][j]); 
        }
    }

    for(i=0; i<3; i++) //产生行号
    {
        int j = 0;
        for(j=0; j<5; j++) //产生列号
        {
            printf("%d ", arr[i][j]); 
        }
        printf("\n");
    }
    return 0;
}

打印:

在这里插入图片描述


9. 二维数组在内存中的存储

我们先打印出数组所有元素的地址:

#include <stdio.h>
int main()
{
    int arr[3][5] = { 0 };
    int i = 0;
    int j = 0;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 5; j++)
        {
            printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
        }
    }
    return 0;
}

打印:

在这里插入图片描述

从输出的结果来看,每一行内部的每个元素都是相邻的,地址之间相差4个字节。

一些特殊的地方,比如说:arr[0][4]arr[1][0]之间也是差4个字节。

所以二维数组中的每个元素都是连续存放的。

在这里插入图片描述


10. C99中的变长数组

在C99标准之前,C语言在创建数组的时候,数组大小的指定只能使用常量、常量表达式,或者如果我们初始化数据的话,可以省略数组大小。

int arr1[10];
int arr2[3+5];
int arr3[] = {1,2,3};

这样的语法限制,让我们创建数组就不够灵活,有时候数组大了浪费空间,有时候数组又小了不够用。

于是,C99标准中给一个变长数组的新特性,允许我们可以使用变量指定数组大小。

int n = a+b;
int arr[n];

这个例子里面,数组 arr 就是变长数组,因为它的长度取决于变量 n 的值,编译器没法事先确定,只有运行时才能知道 n 是多少。

变长数组的数组长度只有运行时才能确定,所以变长数组不能初始化。

注意:有些编译器不支持C99语法,所以使用变长数组有时会报错。


11. 数组练习

编写代码,演示多个字符从两端移动,向中间汇聚:

#include <stdio.h>
int main()
{
    char arr1[] = "welcome to bit...";
    char arr2[] = "#################";
    int left = 0;
    int right = strlen(arr1)-1;//得到数组元素个数减一,用作数组最右边一个元素
    printf("%s\n", arr2);
    while(left<=right)
    {
        Sleep(1000);//延时1秒,这个函数只有Windows电脑可以用
        //这个延时函数可以让下面的打印慢慢出来,比较好玩
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        //将arr1中的字符赋值给arr2中的对应位置。这样arr2中的井号被arr1中的字符替换。
        left++;
        right--;
        //left++;和right--;分别将left和right向中间移动,left 向右移动,right向左移动。
        printf("%s\n", arr2);
    }
    return 0;
}

打印:

在这里插入图片描述

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

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

相关文章

数据挖掘(三)特征构造

前言 基于国防科技大学 丁兆云老师的《数据挖掘》课程 数据挖掘 数据挖掘&#xff08;一&#xff09;数据类型与统计 数据挖掘&#xff08;二&#xff09;数据预处理 3、特征构造 3.1 基本特征构造方法&#xff1a; 3.1.1 运用已有知识直接构造&#xff1a; 一般是根据原有…

Elasticsearch分词及其自定义

文章目录 分词发生的阶段写入数据阶段执行检索阶段 分词器的组成字符过滤文本切分为分词分词后再过滤 分词器的分类默认分词器其他典型分词器 特定业务场景的自定义分词案例实战问题拆解实现方案 分词发生的阶段 写入数据阶段 分词发生在数据写入阶段&#xff0c;也就是数据索…

centos7.9安装PHP运行环境

MySQL安装 报错&#xff1a;源 "MySQL 8.0 Community Server" 的 GPG 密钥已安装&#xff0c;但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。 解决&#xff1a; yum install mysql-server -y --nogpgcheck 查询初始密码 grep temporary password /var…

振弦式应变计的与实际测量值不一致怎么办

在进行结构健康监测或其他工程测量时&#xff0c;精确性和可靠性至关重要。振弦式表面应变计是一种广泛使用的测量工具&#xff0c;它通过测量材料表面的应变来评估结构的应力状态。然而&#xff0c;在实际应用中&#xff0c;振弦式应变计的测量值与实际应变值之间的不一致问题…

Springboot+MybatisPlus如何实现分页和模糊查询

实现分页查询的时候我们需要创建一个config配置类 1、创建MybatisPlusConfig类 Configuration //表明这是一个配置类 ConditionalOnClass(Value{PaginationInterceptor.class} //ConditionalOnClass:当指定的类存在时&#xff0c;才会创建对应的Bean // 这里当PaginationInt…

单调栈练习

最大矩形面积 如果栈为空&#xff0c;或者新的元素是大于栈顶元素的&#xff0c;那么新来的元素不会破坏栈的单调性&#xff0c;那么就把这个柱子入栈。 特别注意&#xff1a;这里的s.empty()和s.top().height < a不能调换顺序&#xff0c;包括后面的判断也要先判断栈是否为…

基于yolov2深度学习网络的单人口罩佩戴检测和人脸定位算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ..............................................................I0 imresize…

C++初阶学习第六弹——string(1)——标准库中的string类

前言&#xff1a; 在前面&#xff0c;我们学习了C的类与对象&#xff0c;认识到了C与C语言的一些不同&#xff0c;今天&#xff0c;我们将进入C的 关键部分——STL&#xff0c;学习完这部分之后&#xff0c;我们就可以清楚的认识到C相比于C语言的快捷与便利 目录 一、为什么有s…

实时网络监控 - 一目了然网络状况

网络问题排查一直是IT管理员头痛的问题。随着网络规模的不断扩大和业务复杂度的提升&#xff0c;如何快速定位和解决网络故障变得尤为关键。本文详细介绍了一款名为 AnaTraf 的网络流量分析工具,它能提供全流量回溯分析、实时网络监控、性能分析等功能,助力企业快速诊断和解决各…

Linux/ubuntu build编译make时出现has modification time int the future的问题解决方法

针对Linux由于双系统之间的时间冲突导致linux时间经常变化&#xff0c;出现执行make命令时出现“make[2]: Warning: File xxx.c’ has modification time 1.6e05 s in the future “警告的问题&#xff0c;亦或者虚拟机出现相同的问题。 由于时钟同步问题&#xff0c;出现 warn…

ChatGlm的部署和训练

一、chatGlm的环境部署 1.安装anocoda 下载安装anaconda。具体教程详见官网教程。 2.安装CUDA 1&#xff09;首先在终端查看你的Nividian版本&#xff0c;命令如下&#xff1a; 2)如果你没有下载你要去下载cuda下载网站&#xff0c;这里是12.3是因为我cuda version版本12…

正则表达式教程

正则表达式在线工具网站&#xff1a;https://regexr.com

项目管理-案例重点知识(整合管理)

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 一、整合管理 案例重点 重点内容&#xff1a; &#xff08;1&#xff09;项目章程内容和作用 &#xff08;2&#xff09;项目管理计划…

牛客网刷题 | BC84 牛牛学数列2

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 这次牛牛又换了个数…

Linux环境变量详解

文章目录 1. 前言2 什么是PATH环境变量3. 如何添加PATH环境变量4. 系统中的其他环境变量5. 环境变量的由来6. 环境变量的基本操作6.1 设置环境变量6.2 通过getenv获取环境变量6.3 环境变量的应用场景 7. 通过命令行参数获取环境变量 1. 前言 本篇文章将以PATH环境变量为例来对整…

基于svpwm(羊角波)控制策略的二极管钳位型三电平逆变器双闭环simulink仿真

本人搭建了基于svpwm&#xff08;羊角波&#xff09;控制策略的二极管钳位型三电平逆变器双闭环simulink仿真模型&#xff0c;该模型按照三电平SVPWM理论生成羊角波&#xff0c;并搭建了双闭环控制系统。效果十分优异&#xff0c;配置参考文献&#xff0c;适合学习使用。 DC&a…

Music Star Studio

Music Star Studio资产包配有一个模块化音乐工作室、40多个游戏道具和完整的场景。 音乐之星工作室包括一个主舞台、一个评委舞台和一个观众座位。工作室是模块化的,您可以使用提供的建筑元素进一步设计您的工作室,如柱子、地板砖、墙砖、楼梯、围栏、舞台、玻璃墙、墙报等。…

C++进阶:红黑树介绍及模拟实现(图示详解过程)

C进阶&#xff1a;红黑树介绍及模拟实现 上次介绍了AVL树&#xff1a;C进阶&#xff1a;AVL树详解及模拟实现&#xff08;图示讲解旋转过程&#xff09; 今天就来紧接着来红黑树啦!!! 文章目录 1.红黑树介绍约束规则 2.项目文件规划3.整体框架&#xff08;节点和Tree&#xf…

从零开始:C++ String类的模拟实现

文章目录 引言1.类的基本结构2.构造函数和析构函数3.基本成员函数总结 引言 在C编程中&#xff0c;字符串操作是非常常见且重要的任务。标准库中的std::string类提供了丰富且强大的功能&#xff0c;使得字符串处理变得相对简单。然而&#xff0c;对于学习C的开发者来说&#x…

树莓派|串口通信协议

1、串口通信原理 串口通讯(Serial Communication)&#xff0c;是指外设和计算机间&#xff0c;通过数据信号线、地线等&#xff0c;按位进行传输数据的一种通讯方式。串口是一种接口标准&#xff0c;它规定了接口的电气标准&#xff0c;没有规定接口插件电缆以及使用的协议。串…