一维数组和二维数组的使用(int类型)

news2025/1/11 5:11:48

目录

  • 导读
  • 1. 一维数组
    • 1.1 一维数组的创建
    • 1.2 数组的初始化
    • 1.3 一维数组的使用
    • 1.4 一维数组在内存中的存储
  • 2. 二维数组
    • 2.1 二维数组的创建
    • 2.2 二维数组的初始化
    • 2.3 二维数组的使用
    • 2.4 二维数组在内存中的存储
  • 博主有话说

导读

本篇主要讲解一维数组和二维数组的创建和使用,还它们在内存中的存储
学习完数组之后我们可以来实现一个基于数组制作的小游戏——三子棋

1. 一维数组

一维数组是数组中最简单的,它的元素只需要用数组名加一个下标,就能唯一地确定。

1.1 一维数组的创建

数组是一组相同类型元素的集合。
数组的创建方式:

type_t arr_name [const_n];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小

实例:

int arr1[10];
char arr3[10];
float arr4[1];
double arr5[20];

注意:
常量表达式中可以包含常量和符号常量,如 “ int a[3+5] ”是合法的。不能包含变量,如:

 int count = 10;
 int arr2[count];

数组创建,在C99标准之前,[]中要给一个常量才可以,不能使用变量。在C99标准支持了变长数
组的概念。

1.2 数组的初始化

数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)

int arr1[10] = {1,2,3};
//前三个元素赋值,系统自动给后面的数初始化为0
int arr2[] = {1,2,3,4};
//花括号中有4个数,虽然没有在方括号中指定数组长度,但是系统会根据花括号中数据的个数确定
int arr3[5] = {1, 2, 3, 4, 5};

1.3 一维数组的使用

对于数组的使用我们之前介绍了一个操作符:[],下标引用操作符。它其实就数组访问的操作符。

int main()
{
	int arr[10] = { 0 };//数组的不完全初始化
   //计算数组的元素个数
	int sz = sizeof(arr) / sizeof(arr[0]);
	//数组的大小可以通过计算得到。
	//对数组内容赋值,数组是使用下标来访问的,下标从0开始。所以:
	int i = 0;//做下标
	for (i = 0; i < 10; i++)//这里写10,好不好?
	{
		arr[i] = i;
	}
	//输出数组的内容
	for (i = 0; i < 10; ++i)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

在这里插入图片描述

1.4 一维数组在内存中的存储

接下来我们探讨数组在内存中的存储。

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; ++i)
	{
		printf("&arr[%d] = %p\n", i, &arr[i]);
		//打印地址
	}
	return 0;
}

在这里插入图片描述
仔细观察输出的结果,我们知道,随着数组下标的增长,元素的地址,也在有规律的递增。
由此可以得出结论:数组在内存中是连续存放的
在这里插入图片描述

2. 二维数组

二维数组常称为矩阵。把二维数组写成行和列的排列形式,可以有助于形象化的理解二维数组的逻辑结构。

2.1 二维数组的创建

type_t arr_name [const_n][const_m];
类型说明符 数组名[常量表达式1][常量表达式2]

实例:

int arr[3][4];
char arr[3][5];
double arr[2][4];

2.2 二维数组的初始化

  1. 可以将所有数据写在一个花括号内,按数组元素在内存中的排序对个元素赋值
  2. 分行给二维数组赋值
  3. 二维数组如果有初始化,行可以省略,列不能省略
//数组初始化
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {{1,2},{4,5}};
int arr[][4] = {{2,3},{4,5}};

2.3 二维数组的使用

二维数组的使用也是通过下标的方式。

int main()
{
	int arr[3][4] = { 0 };
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 4; j++)
		{
			arr[i][j] = i * 4 + j;
		}
	}
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 4; j++)
		{
			printf("%d ", arr[i][j]);
		}
	}
	return 0;
}

在这里插入图片描述

2.4 二维数组在内存中的存储

像一维数组一样,这里我们尝试打印二维数组的每个元素。

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

在这里插入图片描述
通过结果我们可以分析到,其实二维数组在内存中也是连续存储的
在这里插入图片描述

博主有话说

目前数组的讲解就到这里,后续的有关数组越界问题,字符数组,数组做函数参数等内容我们下次再继续,还有更多例题讲解

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

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

相关文章

【软考】4.2 关系代数

《 关系代数 》 表和表之间的逻辑运算 笛卡尔积&#xff1a;S1 x S2 投影&#xff1a;π&#xff1b;选择某一列&#xff08;属性&#xff09;&#xff1b;一个关系R的投影操作结果也是一个关系&#xff0c;记作Πa&#xff0c;它由从关系R中选出的A列元素构成&#xff1b;选择…

React18入门(第二篇)——React18+Ts项目配置husky、eslint、pretttier、commitLint

前言 我的项目版本如下&#xff1a; React&#xff1a; V18.2.0Node.js: V16.14.0TypeScript&#xff1a;最新版工具&#xff1a; VsCode 本文将采用图文详解的方式&#xff0c;手把手带你快速完成在React项目中配置husky、prettier、commitLint&#xff0c;实现编码规范的统…

OpenNebula的配置与应用(一)

学习了OpenNebula的安装之后&#xff0c;接下来就是配置OpenNebula&#xff0c;内容包括配置Sunstone&#xff0c;VDC和集群&#xff0c;设置影像&#xff0c;模板管理&#xff0c;虚拟机管理等。OpenNebula还有大量的工作要做&#xff0c;这些工作主要来自映像、模板和虚拟机管…

[架构之路-225]:计算机硬件与体系结构 - 分类方法大汇总: RISC, CISC

目录 一、分类方法汇总 二、指令流和数据流的关系分类 三、Flynn 分类&#xff1a;指令并行处理 四、根据指令集架构&#xff08;ISA&#xff09;分类 4.1 分类 4.2 开源的RISC-V与封闭的RISC指令集架构比较 4.3 RISC-V的演进路径 4.4 RISC-V与中国芯片自研 4.4 五阶流…

服务网关Gateway_入门案例

创建cloud-gateway-gateway9527工程 pom文件引入依赖 <dependencies><!-- 引入网关Gateway依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></depe…

基于SpringBoot的社区医院管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

修改npm全局安装的插件(下载目录指向)

我们先打开终端 然后执行 npm config get prefix查看npm 的下载地址 一般都会在C盘 但是 我们都知道 C盘下东西多了是很不好的 所以 我们可以执行 npm config set prefix “E:\npmfile”将 npm 的下载地址 改变成 E盘下的 npmfile目录 这样 以后 默认全局安装的插件就会都到…

Mesa新版来袭

Mesa 17.1.6 发布了&#xff0c;Mesa 是一个三维&#xff08;3D&#xff09;图形库的开源集合&#xff0c;其主要目标是在 Linux / UNIX 操作系统下实现各种 API&#xff08;应用程序编程接口&#xff09;和 OpenGL 规范。 它面向 3D 计算机图形&#xff0c;硬件加速 3D 渲染和…

获取上证50的所有股票代码

我们可以从网页&#xff08;板块 - 上证50_ - 股票行情中心 - 搜狐证券&#xff09;中获取&#xff0c; 然后打印出来&#xff1a; import requests from bs4 import BeautifulSoupurl "https://q.stock.sohu.com/cn/bk_4272.shtml" response requests.get(url) …

Python数据透视表

Python数据透视表 1、Excel数据透视表2、Python数据透视表 1、Excel数据透视表 数据透视表&#xff08;Pivot Table&#xff09;是一种交互式的表&#xff0c;可以进行某些计算&#xff0c;如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关 之所以称为数据透视表…

世界前沿技术发展报告2023《世界航天技术发展报告》(四)载人航天技术

&#xff08;四&#xff09;载人航天技术 1. 概述2. 美国多家商业公司开展载人航天发射和测试任务2.1 美国SpaceX公司载人“龙”飞船开展常态化载人任务&#xff0c;并完成首次全商业性太空载人任务2.2 美国蓝色起源公司成功开展两次亚轨道载人飞行任务2.3 美国波音公司“星际客…

Leecode121: 买卖股票的最佳时机1 2 3

第一个思路是从前往后进行遍历&#xff0c;记录一个最小值&#xff0c;然后往后维护一个最大值&#xff0c;不停的减去即可。 买卖股票的最佳时机2&#xff1a; prices [7,1,2,5,6,4] 在第二天买入&#xff0c;在第五天卖出&#xff0c;和不断买入卖出是一样的&#xff0c;所…

Vue中如何进行数据导出与Excel导出

当在Vue.js应用程序中需要进行数据导出并生成Excel文件时&#xff0c;你可以使用一些库和技术来实现这一功能。在本文中&#xff0c;我们将介绍如何在Vue.js中进行数据导出&#xff0c;以及如何将数据导出到Excel文件。我们将使用vue-json-excel库&#xff0c;它是一个用于将JS…

小狐狸ChatGPT付费创作系统V2.3.4独立版 +WEB端+ H5端 + 小程序最新前端安装测试教程

播播资源提供的GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序&#xff0c;是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。播播资源整体测试下来非常完美&#xff0c;本次播播资源提供的ChatGPT付费创作系统V2.3.4版本优化了很多细节&#xff0c;如…

42 将有序数组转换为二叉搜索树

将有序数组转换为二叉搜索树 题解1 DFS构建二叉搜索树&#xff08;平衡树&#xff09;【前序】题解2 中序 给你一个整数数组 nums &#xff0c;其中元素已经按 升序排列&#xff0c;请你将其转换为一棵 高度平衡二叉搜索树。 高度平衡二叉树是一棵满足「每个节点的左右两个子…

Vue中如何进行图片裁剪与上传

Vue中图片裁剪与上传的完整指南 在许多Web应用程序中&#xff0c;用户需要上传并裁剪图片&#xff0c;这是一项常见的任务。Vue.js作为一个流行的JavaScript框架&#xff0c;提供了一些强大的工具和库&#xff0c;可以简化这一过程。本文将介绍如何在Vue.js中进行图片裁剪和上…

sop流程图怎么做?sop流程图可以用什么做好?

标准作业程序sop对于现代生产企业来说是重关重要的一项经营改革&#xff0c;这种新型的管理运作方式既能够为企业节省资源、避免浪费、提高效率&#xff0c;也能够起到指导新员工有序无障碍的投入到工作当中的作用&#xff0c;可以最大程度上避免损耗。 所以一直以来&#xff0…

23.1 Bootstrap 表格

1. 表格 1.1 基础表格 Bootstrap5 通过在<table>元素中添加.table类来设置基础表格的样式.<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

Linux 5种网络模型

[参考]&#xff1a;《黑马程序员Redis》https://www.bilibili.com/video/BV1cr4y1671t/?p166&share_sourcecopy_web&vd_source9e65300ccca322aeb367bb1eb677b0fc [参考]&#xff1a;《操作系统》 [参考]&#xff1a;《UNIX网络编程》 为了避免用户应用导致冲突甚至内…

RabbitMQ核心总结

AMQP协议核心概念 RabbitMQ是基于AMQP协议的&#xff0c;通过使用通用协议就可以做到在不同语言之间传递。 server&#xff1a;又称broker&#xff0c;接受客户端连接&#xff0c;实现AMQP实体服务。 connection&#xff1a;连接和具体broker网络连接。 channel&#xff1a…