数组——知识点大全(简洁,含使用演示和代码)

news2024/9/21 12:33:42

目录

一.一维数组的创建

1.数组的基本形式

2.变长数组

3.数组的初始化 

二.数组的本质

三.一维数组的使用

1.访问数组成员

2.计算数组的大小

四.一维数组在内存中的存储

五.二维数组

1.二维数组的形式

2.二维数组的初始化规则

六.二维数组的使用

1.打印二维数组

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

八.数组越界的情况

九.数组名要点

1.数组名是首元素的地址(存在两个例外)

2.arr,&arr[0],&arr的区别(以及它们+1后的含义)

十.打印数组的两种写法

法一:利用下标引用操作符[](元素本身)

法二:解引用首元素地址(数组名/p)

小拓展:加法交换律的写法

十一.数组作为函数参数时

1.传参的两种形式

1.数组在传参的时候会发生数组名的降级(冒泡排序演示)

一:无法排序的情况

二:解决方式:别在函数内部求数组的个数

十二.数组的实际应用:三子棋 


一.一维数组的创建


1.数组的基本形式


2.变长数组

  • C99中引入了变长数组的概念
  • 变长数组支持数组的大小使用变量来指定,但是变长数组不能初始化
  • 变长数组不是数组的长度可以变化

 例:

int n=0;
scanf("%d",&n);
int arr[n];支持C99标准的编译器环境下能编译

3.数组的初始化 

  • 数组可以不给定范围,但是一定要初始化
  • 初始化分为完全初始化不完全初始化(除了初始化的元素,其余默认为0)
int arr1[2]={1,1};完全初始化
int arr2[10]={1}不完全初始化,第一个元素初始化为1,其余剩下都为0

二.数组的本质

  • 数组的本质是一类相同元素的集合

例:

 

 区别:


三.一维数组的使用


1.访问数组成员

  • 数组是使用下标(下标引用操作符)来访问的,下标从0开始
  • 数组的下标总是比个数小一位

例:

 


2.计算数组的大小


四.一维数组在内存中的存储

  • 一维数组在内存中的存储是连续存放
  • 随着数组下标的增长,地址也是从低到高变化的

        

  • 每一个内存单元大小就是一个字节(byte),即(int占4个内存单元)

 图示:


五.二维数组


1.二维数组的形式


2.二维数组的初始化规则

  • 放满一行,再来一行,其余初始化为0

      

  • { } 决定换行

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

  • 二维数组,行有几个可以不知道,列有几个必须知道
int arr[][4]={{1,2},{4,5}};

 


六.二维数组的使用

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

图示:

 


1.打印二维数组


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

  • 二维数组在内存中的储存也是连续存放
  • 随着数组下标的增长,地址也是从低到高变化的

     

PS:引申用法:当把每行当作一维数组时,数组名可视作行名

     

图示: 


八.数组越界的情况

  • 数组的下标有范围限制。数组的规定是从0开始,如果数组有n个元素,最后一个元素的下标就是n-1。如果数组的下标小于0或者大于n-1,数组越界访问。
  • C语言本身不做数组下标的越界检查,编译器不一定报错

 


九.数组名要点


1.数组名是首元素的地址(存在两个例外)

  1. sizeof(arr),数组名表示整个数组,计算的是整个数组的大小
  2. &arr,数组名表示整个数组,取出的是整个数组的地址

除此之外,遇到的数组名都是数组首元素的地址


2.arr,&arr[0],&arr的区别(以及它们+1后的含义)

  • arr与&arr[0]等效,表示首元素的地址
  • &arr表示数组的地址

PS:arr[n]表示第n+1个数组元素

代码演示: 

int arr[10]={0};

printf("%p\n",arr);首元素的地址
printf("%p\n",arr+1);首元素的地址+1

printf("%p\n",&arr[0]);首元素的地址
printf("%p\n",&arr[0]+1);首元素的地址+1

printf("%p\n",&arr);数组的地址
printf("%p\n",&arr+1);数组结尾下一个的地址

十.打印数组的两种写法

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

int*p=&arr[0]; p为首元素地址
int*p=arr;

法一:利用下标引用操作符[](元素本身)

for(int i=0;i<10;i++)
{
  printf("%d",arr[i]);
}

法二:解引用首元素地址(数组名/p)

//int*p=&arr[0]; p为首元素地址
for(int i=0;i<10;i++)
{
  printf("%d",*(p+i));
  printf("%d",*(arr+i));
}

原理图示:


小拓展:加法交换律的写法

  •  arr[i]等效于i[arr]
int arr[10]={1,2,3,4,5,6,7,8,9,10};

for(int i=0;i<10;i++)
{
  printf("%d",arr[i]);  arr[i]--->*(arr+i)---->*(i+arr)
  printf("%d",i[arr])
}


十一.数组作为函数参数时


1.传参的两种形式

二者等效

void bubble_sort(int* arr);
void bubble_sort(int arr[10]);

1.数组在传参的时候会发生数组名的降级(冒泡排序演示)


一:无法排序的情况

void bubble_sort(int arr[10])
{
   //求数组的元素个数
   int sz=sizeof(arr)/sizeof(arr[0]);  问题点:此时的arr不再是数组,已经降级
   //冒泡排序的趟数
   int i=0;
   for(i=0;i<sz-1;i++)
   {
      int j=0;
      for(j=0;j<sz-1-i;j++)
      {
        if(arr[j]>arr[j+1])
        {
          int tmp=arr[j];
          arr[j]=arr[j+1];
          arr[j+1]=tmp;
        }
      }
    }
}
int main()
{
   int arr[]={3,1,7,5,8,9,0,2,4,6};
   bubble_sort(arr);
   for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
   {
       printf("%d",arr[i]);
   }
   return 0;
}

二:解决方式:别在函数内部求数组的个数

void bubble_sort(int arr[10])
{
   //冒泡排序的趟数
   int i=0;
   for(i=0;i<sz-1;i++)
   {
      int j=0;
      for(j=0;j<sz-1-i;j++)
      {
        if(arr[j]>arr[j+1])
        {
          int tmp=arr[j];
          arr[j]=arr[j+1];
          arr[j+1]=tmp;
        }
      }
    }
}
int main()
{
   int arr[]={3,1,7,5,8,9,0,2,4,6};
   bubble_sort(arr);
   //求数组的元素个数
   int sz=sizeof(arr)/sizeof(arr[0]);  改变点:此时arr为数组
   for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
   {
       printf("%d",arr[i]);
   }
   return 0;
}

十二.数组的实际应用:三子棋 

后续更新

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

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

相关文章

Linux下新加新磁盘分区及挂载

一&#xff1a;新插入磁盘查看 查看插入磁盘 法1&#xff1a;$sudo fdisk -l 法2&#xff1a; $sudo lsblk 二&#xff1a;磁盘分区及格式化 1: 分区 $sudo fdisk /dev/nvme0n1 进入分区工具后&#xff0c;我们可以输入 m 看指令说明&#xff1a; Command (m for help): …

前端框架比较:Vue.js、React、AngularJS三者的优缺点和应用场景

章节一&#xff1a;引言 在当前的互联网开发中&#xff0c;前端框架已经成为了不可或缺的一部分。然而&#xff0c;前端框架如此之多&#xff0c;该如何选择呢&#xff1f;Vue.js、React和AngularJS是目前比较受欢迎的三个前端框架&#xff0c;它们各自有着不同的优缺点和应用…

MySQL笔记(三) 联结、组合查询、全文本搜索、视图、索引、触发器、事务

文章目录 联结关系表为什么要使用联结维护引用完整性 内部联结联结多个表创建高级联结使用表别名 自联接自然联结外部联结 OUTER JOIN外部联结的类型 使用带聚集函数的联结要点 组合查询 UNION创建规则注意 全文本搜索查询拓展布尔文本搜索总结 视图为什么使用视图视图的规则和…

虚拟机与主机互传文件方法分享

现在虚拟机的使用已经非常普及&#xff0c;无论新手学习&#xff0c;还是运维工程师搭建虚拟化平台&#xff0c;都会使用到虚拟机。对个人用户来说&#xff0c;非常方便就能搭建很多操作系统进行学习&#xff1b;对企业用户来说更是降低了服务器的硬件成本。 使用虚拟机的时候…

本周日直播,全链路数据治理实践论坛开放报名

5月14日&#xff0c;09:00-12:00&#xff0c;由阿里云资深技术专家温绍锦老师出品的 DataFun Summit 2023&#xff1a;数据治理在线峰会-全链路数据治理论坛&#xff0c;将邀请来自阿里、Aloudata大应科技、爱奇艺的4位专家就相关主题进行深度分享&#xff0c; 出品人&#xff…

JAVA-继承

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 1.为什么需要继承 2. 继承的语法 3.子类构造方法 4.super和this的异同 5.final 关键字 总结 前言 继承是面向对象语法的三大特征之一。在以后写…

【Python 装饰器成长路径】零基础也能轻松掌握的学习路线与参考资料

Python装饰器是Python语言的一个重要特性&#xff0c;可以让代码更加简洁、优雅&#xff0c;并且让代码重用性更加高效。本文针对Python装饰器的学习路线&#xff0c;参考资料和优秀实践进行详细介绍。 文章目录 一、学习路线二、参考资料三、优秀实践 一、学习路线 了解函数…

10. 类的友元

一、类的友元 生活中你的家有客厅&#xff08;public&#xff09;&#xff0c;有你的卧室&#xff08;private&#xff09;&#xff0c;客厅所有来的客人都可以进去&#xff0c;但是你的卧室是私有的&#xff0c;也就是说只有你能进去&#xff0c;但是&#xff0c;你也可以允许…

01-mysql安装篇(rpm方式安装+压缩包安装)

文章目录 一、rpm方式安装1、检查是否安装了mariadb2、下载mysql3、上传解压4、安装5、检查安装6、开启mysql服务7、登陆mysql8、修改密码设置规则&#xff08;简单型-学习用&#xff09;9、修改密码10、授权远程登陆11、启停mysql命令12、rpm方式安装说明 二、压缩包方式安装V…

前端技术搭建飞机大战小游戏(内含源码)

The sand accumulates to form a pagoda ✨ 写在前面✨ 功能介绍✨ 页面搭建✨ 样式设置✨ 逻辑部分 ✨ 写在前面 上周我们实通过前端基础实现了弹珠游戏&#xff0c;当然很多伙伴再评论区提出了想法&#xff0c;后续我们会考虑实现的&#xff0c;今天还是继续按照我们原定的节…

2023年第三届长三角高校数学建模竞赛】A 题 快递包裹装箱优化问题 详细数学建模过程

1 题目 2022 年&#xff0c;中国一年的包裹已经超过 1000 亿件&#xff0c;占据了全球快递事务量的一半以上。近几年&#xff0c;中国每年新增包裹数量相当于美国整个国家一年的包裹数量&#xff0c; 十年前中国还是物流成本最昂贵的国家&#xff0c;当前中国已经建立起全世界…

阿里云服务器建站教程来了(十分钟网站上线)

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程&#xff1a; …

布朗运动模拟

布朗运动模拟 文章目录 布朗运动模拟[toc]1 布朗运动定义2 布朗运动模拟3 布朗桥4 带漂移布朗运动5 几何布朗运动 1 布朗运动定义 给定随机过程 { W ( t ) , t ≥ 0 } \{W(t),t \ge 0 \} {W(t),t≥0}&#xff0c;满足以下条件&#xff0c;则称 W ( t ) W(t) W(t)为标准布朗运动…

1 ElasticSearch介绍

全文检索 Elastisearch 研究 目标 了解Elasticsearch的应用场景掌握索引维护的方法掌握基本的搜索Api的使用方法 约束 阅读本教程之前需要掌握Lucene的索引方法、搜索方法 。 1 ElasticSearch介绍 1.1 介绍 官方网址&#xff1a;https://www.elastic.co/cn/products/elas…

【OpenCV】学习课-图像获取与显示(1)!

OpenCV是一个基于Apache2.0许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1] 它轻量级而且高效——由一系列 C 函数和少量 C 类构成&#xff0c;同时提供了Python、Ruby、MATLA…

JAVA-多态

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 文章目录 1.多态的概念 2.多态的实现条件 3.重写 总结 1.多态的概念 什么是多态? 通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个…

【仪器控制】LAN Web 浏览器界面!

仪器支持不同的接口和协议进行远程控制。下表给出了概述 LAN web 浏览器界面 &#xff1a; LAN Web 浏览器界面允许轻松配置 LAN 和远程控制 R&S FSW&#xff0c;无需额外的安装要求。 仪器的 LAN 网络浏览器界面可与所有 W3C 兼容的浏览器正常工作。 通过 R&S FSW 的 …

React组件实例state-事件绑定(三)

类组件中的属性 我们看一个简单的类组件实例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>hello_react</title></head><body><!-- 准备好一个“容器” --><div id&q…

Tech Talk | 还原照片不同亮度范围细节——RAW HDR技术

拍照时&#xff0c;你是否遇到过这些情况呢&#xff1f; 拍摄的成片暗区过暗&#xff0c;高亮区域过曝 逆光拍摄中&#xff0c;会出现“鬼影” 暗部噪声偏大导致图像出现瑕疵 ....... 照片的高光和暗区细节得总是不到完美呈现&#xff0c;这是所有拍摄设备都会出现的问题。那么…

淘宝拍立淘多码识别方案总结

本文通过拆解原始问题、发散思路优化等方式&#xff0c;记录了扫一扫从单码到多码识别的技术框架改造及多码识别率优化方案。其中涉及解码SDK的能力、码处理技术链路、码转换算法、降低漏检率策略等设计与实现。 背景与挑战 多码即在同一个界面中同时存在多个条码或二维码&…