【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;
}

打印:

在这里插入图片描述

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

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

相关文章

string功能介绍(普及版)

目录 1。初始化&#xff08;好几种方式&#xff09;&#xff0c;npos和string的使用说明 2。string的拷贝&#xff0c;隐式类型转换&#xff0c;[]&#xff0c;size&#xff0c;iterator&#xff0c;begin&#xff0c;end&#xff0c;reverse&#xff0c;reverse_iterator&am…

网络安全快速入门(十二)(下) 目录结构相关命令补充

12.4 补充命令 我们已经了解了linux的目录结构&#xff0c;接下来我们大概看一下针对目录及文件的一些相关命令&#xff0c; 我们本章只讲三个目录及文件相关的命令&#xff0c;分别是tree&#xff0c;find及校验文件命令&#xff0c;我们一个一个来看这些命令。 12.4.1 tree命…

Leetcode2105. 给植物浇水 II

Every day a Leetcode 题目来源&#xff1a;2105. 给植物浇水 II 解法1&#xff1a;双指针 设 Alice 当前下标为 i&#xff0c;初始化为 0&#xff0c;水量为 a&#xff0c;初始化为 capacityA&#xff1b;Bob 当前下标为 j&#xff0c;初始化为 n-1&#xff0c;水量为 b&am…

【AI】DeepStream(03):deepstream_test1_app

1、简介 deepstream-test1:演示各种 DeepStream 插件构建 GStreamer 管道。从文件中获取视频、解码、批处理,然后进行对象检测,最后在屏幕上渲染框。 源码路径:/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test1 先看下效果 2、编译 1)…

Pytorch读取自己的数据集

数据集 流程图 导包设置tfs创建datasets.ImageFolder创建torch.utils.data.DataLoader() import time import os from tqdm import tqdm import pandas as pd import numpy as np import torch import torchvision import torch.nn as nn import torch.nn.functional as F im…

随机梯度算法应用动画场景

https://github.com/lilipads/gradient_descent_viz #include <math.h> #include <iostream> namespace Function { enum FunctionName { local_minimum, // 许多小坑 global_minimum, // 大坑 saddle_point, // 起伏山路 …

基于GWO灰狼优化的CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 GRU网络 4.3 注意力机制&#xff08;Attention&#xff09; 4.4 GWO优化 5.算法完整程序工程 1.算法运行效果图预览…

【Android踩坑】 Constant expression required

gradle 8&#xff0c;报错 Constant expression required&#xff1a;意思是case语句后面要跟常量 解决1 单击switch语句&#xff0c;键盘按下altenter&#xff0c;将switch-case语句替换为if-else语句(或者手动修改) 解决2 在gradle.properties中添加 android.nonFinalRes…

IP代理网络协议介绍

在IP代理页面上&#xff0c;存在HTTP/HTTPS/Socks5三种协议。它们都是客户端与服务器之间交互的协议。 HTTP HTTP又称之为超文本传输协议&#xff0c;在因特网使用范围广泛。它是一种请求/响应模型&#xff0c;客户端向服务器发送请求&#xff0c;服务器解析请求后对客户端作出…

meshlab: pymeshlab合并多个物体模型并保存(flatten visible layers)

一、关于环境 请参考&#xff1a;pymeshlab遍历文件夹中模型、缩放并导出指定格式-CSDN博客 二、关于代码 本文所给出代码仅为参考&#xff0c;禁止转载和引用&#xff0c;仅供个人学习。 本文所给出的例子是https://download.csdn.net/download/weixin_42605076/89233917中的…

Centos 安装jenkins 多分支流水线部署前后端项目

1、安装jenkins 1.1 安装jdk 要求&#xff1a;11及以上版本 yum install yum install java-11-openjdk 1.2 安装jenkins 导入镜像 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo出现以下错误 执行以下命令 sudo yum …

iview(viewUI) span-method 表格实现将指定列的值相同的行合并单元格

效果图是上面这样的&#xff0c;将第一列的名字一样的合并在一起&#xff1b; <template><div class"table-wrap"><Table stripe :columns"columns" :data"data" :span-method"handleSpan"></Table></div&…