当前位置: 首页 > news >正文

【C语言】--数组

😊个人主页: 起名字真南
😋个人专栏:【数据结构初阶】 【C语言】 【C++】

请添加图片描述

目录

  • 1 数组的概念
  • 2 一维数组的创建和初始化
    • 2.2 数组的初始化
    • 2.3 数组类型
  • 3 一维数组的使用
    • 3.1 数组下标
    • 3.2 数组的输入
  • 4 一维数组在内存中的存储
  • 5 sizeof计算数组中的元素
  • 6 二维数组
    • 6.1 二维数组的概念
    • 6.2 二维数组的创建
  • 7 二维数组初始化
    • 7.1 不完全初始化
    • 7.2 完全初始化
    • 7.3 按照行初始化
    • 7.4 省略行进行初始化
  • 8 二维数组的使用
    • 8.1 二维数组的下标
    • 8.2 二维数组输出和使用
  • 9 二维数组在内存中的存储

1 数组的概念

数组是一组相同类型元素的集合 :

  • 数组中存放的是一个或多个数据数组中元素的个数不能为0
  • 数组中存放的数据他们的类型都是相同的。
    数组分为一维数组和多维数组,其中多维数组大部分指的是二维数组

2 一维数组的创建和初始化

一维数组创建的基本语法如下:

type arr_name[常量];

存放在数组中的值被称为数组元素,数组在创建的时候可以指定数组的大小和数组的元素类型。

  • type:是数组的元素类型可以是int 、char 、double 、float、还可以是自定义类型
  • arr_name:是数组的名字有意义即可
  • [] : 里面存放的是数组元素的个数,里面存放的是常量值

比如我们想创建某个班级里面10个学生的成绩,我们可以创建如下数组:

int manth[20];

2.2 数组的初始化

//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr_1[5] = {1};  //第一个元素初始化为1,其余元素初始化为0
//错误初始化
int arr_2[5] = {1,2,3,4,5,6};//初始化项大于5

2.3 数组类型

数组算是一种自定义类型,去掉数组名剩下的就是数组类型

int arr1[5] = {1,2,3,4,5}
char ch[6] = {'a','b','c','d','e','\0'}

arr1 的数组类型就是 int [5]
ch 的数组类型就是 char [6]

3 一维数组的使用

3.1 数组下标

C语言规定数组是有下标的,下标从0开始,假设数组有n个元素,最后一个元素的下标就是n-1

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

在这里插入图片描述
在C语言中提供了一个 [] 操作符,我们可以通过数组的下标直接访问这个元素如果我们想要访问7这个元素,它的下标是6,那么就可以通过数组名[]的方式直接调用。

#include<stdio.h>int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };for (int i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}

运行结果:
在这里插入图片描述
每次打印数组数据的时候通过 arr[下标] 的方式来直接调用数组中的元素。

3.2 数组的输入

如果我们想通过控制台手动向数组中输入数据时应该怎么办呢?

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>int main()
{int arr1[5] = { 0 };for (int i = 0; i < 5; i++){scanf("%d", &arr1[i]);}for (int i = 0; i < 5; i++){printf("%d ", arr1[i]);}return 0;}

运行结果:
在这里插入图片描述

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

依次打印数组中每个元素的地址:

int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };for (int i = 0; i < 10; i++){printf("%p\n", &arr[i]);}return 0;
}

运行结果:
在这里插入图片描述
可以看到在内存中他们的存储空间是连续的10个空间,因为数组中存储的元素时int类型所以每个数据的大小都是4个字节。
我们可以打开另一个内存窗口进行观察:
在这里插入图片描述

5 sizeof计算数组中的元素

sizeof是C语言中的关键字,可以计算类型和变量的大小,也可以计算数组中元素的大小。

int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int arr_size1 = sizeof(arr);int arr_size2 = sizeof(arr[1]);printf("arr_size1 = %d\n", arr_size1);printf("arr_size2 = %d\n", arr_size2);return 0;
}

运行结果:
在这里插入图片描述
可以看到arr_size1时整个数组元素的大小因为数组元素的类型是int,并且有十个数据所以整个数组的大小是40,而arr[1]使用了[]操作符得到的是数组下标为1的数据,他的类型是int大小是四个字节。
接下来我们就可以计算数组中的元素个数:

int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int arr_size1 = sizeof(arr);int arr_size2 = sizeof(arr[1]);printf("arr_size1 = %d\n", arr_size1);printf("arr_size2 = %d\n", arr_size2);int num = sizeof(arr) / sizeof(arr[1]);printf("数组中元素的个数是 :%d",num);return 0;
}

运行结果:
在这里插入图片描述
这里的结果是10,表示数组中有十个元素。

6 二维数组

6.1 二维数组的概念

二维数组就是将一维数组作为自己的数组元素的数组。而三维数组就是以二维数组作为自己的数组元素,三维及以上数组被称为多维数组。

6.2 二维数组的创建

type arr_name[常量1][常量2];int arr[3][4];
char ch[5][6];
  • int 是二维数组中的变量类型
  • 3/5 表示创建的二维数组有3/5行
  • 4/6 表示有4/6列,即每一行有4/6个元素
  • arr/ch 则是数组名有意义即可

7 二维数组初始化

在创建变量和数组的时候,给定一些值称为初始化。

7.1 不完全初始化

不完全初始化:

int main()
{int arr1[3][5] = { 1,2 };int arr2[3][4] = { 0 };return 0;
}

初始化结果:
在这里插入图片描述

7.2 完全初始化

完全初始化 :

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

初始化结果:
在这里插入图片描述

7.3 按照行初始化

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

初始化结果 :
在这里插入图片描述

7.4 省略行进行初始化

在定义二维数组的时候可以把第一个变量省略也就是省略行数,但是每一行所有的元素个数(列数)不能省略

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

初始化结果:
在这里插入图片描述

8 二维数组的使用

8.1 二维数组的下标

C语言规定二维数组的行和列的下标都是从0开始的

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

下标:
在这里插入图片描述

8.2 二维数组输出和使用

int main()
{int arr[3][4] = { 0 };//行for (int i = 0; i < 3; i++){// 列for (int j = 0; j < 4; j++){scanf("%d", &arr[i][j]);}}//打印输出for (int i = 0; i < 3; i++){for (int j = 0; j < 4; j++){printf("%d ", arr[i][j]);}printf("\n");}return 0;
}

初始化结果 :
在这里插入图片描述

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

int arr[3][4] = { 0 };

内存展示:
在这里插入图片描述
可以看到和一维数组一样每个地址之间相差四个字节,第一行的最后一个和第二行的第一个数组元素也是连续的并且相差了四个字节。

相关文章:

【C语言】--数组

&#x1f60a;个人主页: 起名字真南 &#x1f60b;个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 数组的概念2 一维数组的创建和初始化2.2 数组的初始化2.3 数组类型 3 一维数组的使用3.1 数组下标3.2 数组的输入 4 一维数组在内存中的存储5 sizeof计算数组中的元素6 二维…...

面向B2B市场的Spring Boot医疗病历系统开发

第1章绪论 计算机已经从科研院所&#xff0c;大中型企业&#xff0c;走进了平常百姓家&#xff0c;Internet遍及世界各地&#xff0c;在网上能够用计算机进行文字草拟、修改、打印清样、文件登陆、检索、综合统计、分类、数据库管理等&#xff0c;用科学的方法将无序的信息进行…...

闭着眼学机器学习——支持向量机分类

引言&#xff1a; 在正文开始之前&#xff0c;首先给大家介绍一个不错的人工智能学习教程&#xff1a;https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程&#xff0c;感兴趣的读者可以自行查阅。 1. 算法介绍 支持向量机(Support Vector Mach…...

今日指数项目day8实战权限管理器(上)

3.权限管理器 3.1 权限列表展示功能 1&#xff09;原型效果 2&#xff09;接口说明 功能描述&#xff1a; 查询所有权限集合 服务路径&#xff1a; /api/permissions 服务方法&#xff1a;Get 请求参数&#xff1a;无响应数据格式: {"code": 1,"data":…...

《机器学习与数据挖掘综合实践》实训课程教学解决方案

一、引言 随着信息技术的飞速发展&#xff0c;人工智能已成为推动社会进步的重要力量。作为人工智能的核心技术之一&#xff0c;机器学习与数据挖掘在各行各业的应用日益广泛。本方案旨在通过系统的理论教学、丰富的实践案例和先进的实训平台&#xff0c;帮助学生掌握机器学习…...

linux中软连接和硬链接的区别

定义与概念 硬链接&#xff08;Hard Link&#xff09;&#xff1a;硬链接是文件系统中的一个概念&#xff0c;它直接指向文件系统中的物理数据块。可以把硬链接看作是原始文件的一个别名&#xff0c;它们共享相同的inode&#xff08;索引节点&#xff09;编号。在Linux文件系统…...

#Swift 对比 Static 在Swift 和 OC中的用法

在 Objective-C 和 Swift 中&#xff0c;static 关键字都用于定义类型级别的成员&#xff0c;但它们的用法和行为在两个语言中有所不同。让我们来详细对比一下 Objective-C 和 Swift 中 static 的使用方式和特性。 1. Objective-C 中的 static 在 Objective-C 中&#xff0c;…...

yakit使用教程(三,端口探测和指纹扫描)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言&#xff1a; 前文链接&#xff1a;yakit下载安装教程。 1.端口扫描的作用。 对目标端口进行扫描可以知道目标服务器开启了什么服务&#xff0c;以便于针对其所存在的服务展开…...

一维数组的引用

#define SIZE 5 int main(void) { int i 0; int arr[SIZE] { 86,85,85,896,45 };//同理五个数据只是偶然&#xff0c;可能会更多 //输入 for (i 0;i < SIZE;i) { printf("请输入你的第%d个值&#xff1a;",i1); scanf_s(&…...

Vue3 watch 监视属性

作用&#xff1a;监视数据的变化&#xff08;和Vue2中的watch作用一致&#xff09;特点&#xff1a;Vue3中的watch只能监视以下四种数据&#xff1a; ref定义的数据。reactive定义的数据。函数返回一个值&#xff08;getter函数&#xff09;。一个包含上述内容的数组。 我们在V…...

大数据-158 Apache Kylin 安装配置详解 集群模式启动

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

PHP商会招商项目系统一站式服务助力企业腾飞

商会招商项目系统——一站式服务&#xff0c;助力企业腾飞 &#x1f680;&#x1f4bc; &#x1f680; 开篇&#xff1a;企业成长的加速器&#xff0c;商会招商项目系统来袭 在竞争激烈的市场环境中&#xff0c;企业如何快速找到适合自己的发展路径&#xff0c;实现腾飞&…...

pnpm 和 npm

pnpm 和 npm 是 JavaScript 生态系统中常用的包管理工具&#xff0c;它们各自有不同的特性和优缺点。下面是这两者的详细比较&#xff1a; 1. 基本概念 npm (Node Package Manager)&#xff1a; 是 Node.js 的默认包管理器&#xff0c;提供安装、更新、卸载 JavaScript 包的功…...

笔试算法总结

文章目录 题目1题目2题目3题目4 题目1 使用 StringBuilder 模拟栈的行为&#xff0c;通过判断相邻2个字符是否相同&#xff0c;如果相同就进行删除 public class Main {public static String fun(String s) {if (s null || s.length() < 1) return s;StringBuilder builde…...

mybatisPlus对于pgSQL中UUID和UUID[]类型的交互

在PGSQL中&#xff0c;有的类型是UUID和UUID[]这种类型&#xff0c;在mybatis和这些类型交互的时候需要手动设置类型处理器才可以&#xff0c;这里记录一下类型处理器的设置 /*** UUID类型处理器*/ public class UUIDTypeHandler extends BaseTypeHandler<UUID> {/*** 获…...

vue3 高德地图标注(飞线,呼吸点)效果

装下这两个 npm 忘了具体命令了&#xff0c;百度一下就行 “loca”: “^1.0.1”, “amap/amap-jsapi-loader”: “^1.0.1”, <template><div id"map" style"width: 100%;height: 100%;"></div> </template><script setup> …...

程序员成长秘籍:是迈向管理巅峰,还是深耕技术架构?

专业在线打字练习平台-巧手打字通&#xff0c;只输出有价值的知识。 一 管理和架构 做技术的同学一般有两条职业发展路径&#xff0c;横向的管理路线和纵向的技术路线。管理路线对应的是管理岗&#xff0c;讲究的是排兵布阵&#xff0c;通过各种资源的优化配置发挥价值。技术路…...

xargs的参数及常用命令

1. xargs 命令简介 xargs 是一个非常有用的工具&#xff0c;它用于从标准输入&#xff08;stdin&#xff09;构建和执行命令行。xargs 可以将标准输入中以空格或换行符分隔的数据&#xff0c;转化为命令的参数传递给其他命令。 使用场景&#xff1a; 当某些命令不支持使用管…...

FLASK 数据库建立以及部署和表的创建

首先安装flask-sqlalchemy db SQLAlchemy(app) 一 Mmeber、User模型类的创建 # coding: utf-8 from app import db, appclass Member(db.Model):__tablename__ memberid db.Column(db.Integer, primary_keyTrue)membername db.Column(db.String(100), uniqueTrue, index…...

微信小程序的面试题

简述下 wx.navigateTo(), wx.redirectTo(), wx.switchTab(), wx.navigateBack(), wx.reLaunch() 区别 &#xff1f; wx.navigateTo() : 保留当前页面&#xff0c;跳转到应用内的某个页面。但是不能跳到 tabbar 页面 wx.redirectTo() : 关闭当前页面&#xff0c;跳转到应用内的…...

Flutter桌面端窗口控制:从隐藏标题栏到自定义全屏交互

1. 为什么需要自定义窗口控制&#xff1f; 当你用Flutter开发Windows桌面应用时&#xff0c;系统默认的标题栏和窗口样式往往显得格格不入。想象一下&#xff0c;你精心设计了一套深色主题的UI&#xff0c;结果顶部突然冒出一条灰白色的标准标题栏——就像给西装革履的绅士戴了…...

3D打印印章模具全攻略:从数字设计到硅胶翻模的实践指南

1. 项目概述&#xff1a;当3D打印遇上传统印章艺术我一直对融合数字制造与传统手工艺的项目特别着迷&#xff0c;最近花了不少时间折腾用3D打印模具来制作定制印章&#xff0c;整个过程就像在数字世界和物理世界之间架起了一座桥。简单来说&#xff0c;这个项目的核心思路是&am…...

【目标检测系统网页版】基于YOLOv8的淡水鱼检测系统

【目标检测系统网页版】基于YOLOv8的淡水鱼检测系统 一、系统介绍 1、系统简介 基于YOLOv8的淡水鱼检测 Web 系统&#xff0c;支持单图检测、批量图片检测、视频检测与实时视频流检测。 2、功能特性 智能识别&#xff1a;YOLOv8 封装&#xff0c;单例加载&#xff0c;自动设…...

Linux光标主题管理工具x-cursor-help:从原理到实战

1. 项目概述&#xff1a;一个被低估的鼠标光标辅助工具如果你在Linux桌面环境下工作&#xff0c;尤其是使用像GNOME、KDE Plasma这类现代化的桌面环境&#xff0c;你可能会遇到一个不大不小但很恼人的问题&#xff1a;鼠标光标主题的安装和管理。从网上下载了一个漂亮的.tar.gz…...

Node.js代理池实战:proxy-agents库核心原理与高级应用

1. 项目概述与核心价值最近在折腾一些需要处理大量网络请求的自动化脚本&#xff0c;比如数据采集、API测试或者模拟用户操作&#xff0c;一个绕不开的痛点就是IP被封。单个IP频繁请求&#xff0c;对方服务器很容易就把你拉黑了。这时候&#xff0c;代理池就成了刚需。市面上成…...

为AI智能体设计的任务管理后端:构建标准化、机器友好的任务元模型

1. 项目概述&#xff1a;一个为AI而生的待办清单最近在折腾各种AI工具链和自动化流程时&#xff0c;我遇到了一个挺普遍的问题&#xff1a;如何让AI助手&#xff0c;比如ChatGPT、Claude或者本地部署的大语言模型&#xff0c;更好地理解并管理我手头一堆零散、动态的任务&#…...

大语言模型并行推理技术Hogwild! Inference解析

1. 大语言模型并行推理的技术挑战在传统的大语言模型推理过程中&#xff0c;文本生成采用的是严格的自回归方式&#xff0c;即每个token的生成都依赖于之前所有token的输出。这种串行模式虽然保证了生成的连贯性&#xff0c;但也带来了显著的性能瓶颈。以1750亿参数的GPT-3为例…...

【深度解析】Qwen 3.6 vs Gemma 4:本地大模型时代,如何选对“日常开发模型”

摘要&#xff1a; 开源权重模型正在快速逼近闭源模型能力边界。本文结合 Qwen 3.6 与 Gemma 4 的实际案例&#xff0c;从架构、上下文、显存、基准测试到落地场景&#xff0c;拆解本地大模型选型逻辑&#xff0c;并给出可直接运行的 Python 调用示例。 背景介绍 近两年&#xf…...

基于ADT7410与ESP8266的物联网温度监测系统实战指南

1. 项目概述&#xff1a;从传感器到云端的温度监测闭环在嵌入式开发和物联网项目中&#xff0c;温度监测是一个经典且高频的需求场景。无论是实验室环境监控、智能家居的恒温控制&#xff0c;还是工业设备的状态感知&#xff0c;一个稳定、精确且能远程访问的温度数据流都是基础…...

Nuxt.js Tailwind CSS 模块:零配置快速启动现代Web开发

Nuxt.js Tailwind CSS 模块&#xff1a;零配置快速启动现代Web开发 【免费下载链接】tailwindcss Tailwind CSS module for Nuxt 项目地址: https://gitcode.com/gh_mirrors/tai/tailwindcss Nuxt.js Tailwind CSS 模块是一个专为Nuxt框架设计的Tailwind CSS集成解决方案…...