数组的简单总结

Elasticsearch-关于数组的简单使用 前言 本文基于elasticsearch7.3.0版本 实例 # 创建索引 PUT my_index { "mappings": { "properties": { "company":{ "type": "keyword" } } } } # 添加数据 PUT my_index/_doc/1 { "company":"alib... 阅读详情
一、一维数组

1、一维数组的创建
数组的创建:数组是一组相同元素的集合
数组的创建方式:

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

数组创建的实例:

int arr1[10];
char arr2[5];
double arr3[10];`

注:在创建数组时,[]中只能给出常量,不能使用变量(宕机)。

2、 一维数组的初始化
数组的初始化:在创建数组的同时给数组的内容附上一些合理的初始值(初始化)。
下面是一些代码:

int arr1[10]={1,2,3}; //部分初始化
int arr2[4]={1,2,3,4};//完全初始化
int arr3[]={1,5,6,8,9};
char arr4[3]={‘a’,98,‘c’};
char arr5[]={‘a’,‘b’,‘c’};
char arr6[]=“abcdef”; 此时[]中的值为7,在”abcdef“字符串后还有’\0’`

在数组创建时,如果不想确定的给出数组的大小,就得对数组进行初始化,数组中元素的个数根据初始化的内容确定。

以下代码要很好区分在内存中的空间分配

char arr1[]=“abc”;
char arr[2]={‘a’,‘b’,‘c’};
char* p=“abcdef”;`
这里写图片描述

3、一维数组的使用

#include<stdio.h>
int main()
{
int arr[10]={0};
int i=0;
for(i=0;i<10;i++)
{
arr[i]=i;
printf("%d ",arr[i]);
}
return 0;
}

总结:
1)、数组是使用下标来访问的,下标从 0开始。
2)、数组的大小可以通过计算得到。

int arr[10];
int sz=sizeof(arr)/sizeof(arr[0]);

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

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

输出的结果:
这里写图片描述

由输出的结果我们可以得到,随着下标的增长,元素的地址也在有规律的递增。

结论:数组在内存中是连续存放的
这里写图片描述
5、指针的初步介绍
为了很好的管理内存,我们对内存进行了详细的编址。
这里写图片描述
结论:
1)、内存中的一个内存单元(字节)对应一个地址。
2)、在32位的平台上一个指针的大小是4个字节,64位平台上是8个字节。
指针可以理解为一个变量,是一个专门用来存放地址的变量,通常我们讲的指针其实是一个变量。

指针变量的定义

int *ptr=NULL;//定义一个整形指针变量,初始化为NULL
char ptr =NULL;//定义一个字符型指针变量,初始化为NULL
double
ptr=NULL;//定义一个双精度浮点数的指针变量,初始化为NULL

在得到指针以后,如果需要指针所指向的变量,则可以使用*(解引用操作符)。

int n=10;
int *p_n=&n;//将num的地址放到p_n指针变量中
*p_n=20;//改变变量n的值

6、一维数组的指针访问

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

输出结果:
这里写图片描述
由此可见:数组的数组名就是数组首元素的地址。

由首地址得到每个元素的地址:

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

输出结果:
这里写图片描述
由此:通过对数组名+整数的运算方式,可以得到数组每个元素的地址。

二、二维数组

1、二维数组的创建和初始化
二维数组的创建:

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

二维数组初始化

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

2、二维数组的使用

#include<stdio.h>
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;
}

3、二维数组在内存中的存储

#include<stdio.h>
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++)
		{
		printf("&arr[%d][%d]=%p\n",i,j,&arr[i][j]);
		}
	}
	return 0;
}

输出结果如下:
这里写图片描述
由此可知:二维数组在内存中也是来连续存储的
这里写图片描述
4、二维数组的指针访问(使用指针访问二维数组)

#include<stdio.h>
int main()
{
	int arr[3][4]={0};
	int *p=&arr[0][0];
	int i=0;
	for(i=0;i<3*4;i++)
	{
		*(p+i)=i; 
	}
	for(i=0;i<3;i++)
	{
		int j=0;
		for(j=0;j<4;j++)
		{
			printf("%d",arr[i][j]);
		}
	}
	return 0;
}
三、有关数组的运算
#include<stdio.h>
int main()
{
	int a[]={1,2,3,4};
	printf("%d\n",sizeof(a));
	printf("%d\n",sizeof(a+0));
	printf("%d\n",sizeof(*a));
	printf("%d\n",sizeof(a+1));
	printf("%d\n",sizeof(a[1]));
	printf("%d\n",sizeof(&a));
	printf("%d\n",sizeof(*&a));
	printf("%d\n",sizeof(&a+1));
	printf("%d\n",sizeof(&a[0]));
	printf("%d\n\n\n\n",sizeof(&a[0]+1));
	printf("%p\n",sizeof(a));
	printf("%p\n",sizeof(a+0));
	printf("%p\n",sizeof(*a));
	printf("%p\n",sizeof(a+1));
	printf("%p\n",sizeof(a[1])); 
	printf("%p\n",sizeof(&a));
	printf("%p\n",sizeof(*&a));
	printf("%p\n",sizeof(&a+1));
	printf("%p\n",sizeof(&a[0]));
	printf("%p\n",sizeof(&a[0]+1));
	return 0;
}

输出结果:
这里写图片描述

#include<stdio.h>
#include<string.h>
int main()
{
	char *p="abcdef";
	printf("%d\n",sizeof(p));
	printf("%d\n",sizeof(p+1));
	printf("%d\n",sizeof(*p));
	printf("%d\n",sizeof(p[0]));
	printf("%d\n",sizeof(&p));
	printf("%d\n",sizeof(&p+1));
	printf("%d\n\n\n",sizeof(&p[0]+1));
	printf("%d\n",strlen(p));
	printf("%d\n",strlen(p+1));
	printf("%d\n",strlen(*p));      //err
 	printf("%d\n",strlen(p[0]));   //err
	printf("%d\n",strlen(&p));     //x 
	printf("%d\n",strlen(&p+1));  //x
	printf("%d\n",strlen(&p[0]+1));
	return 0;
}

输出结果:
这里写图片描述
总结:
数组名代表数组的时候只有两种情况:
1、sizeof(数组名),这里的数组名代表整个数组,sizeof(数组名)计算的是整个数组的大小
2、&数组名,这里的数组名代表整个数组,&数组名 取出的是数组的地址
除此之外,所有的数组名都表示数组首元素的地址

四、数组作为函数参数

当数组作为函数参数时,不会将整个数组传递过去,而只是把数组的首元素的地址传递过去,所以即使在函数参数部分写成数组的形式:int arr[],它表示的依然是一个指针:int* arr.

【差分数组 树状数组】P5057 [CQOI2006] 简单题|普及+ 有一个 $n$ 个元素的数组,每个元素初始均为 $0$。有 $m$ 条指令,每条指令为两种操作中的一种: 1. 让其中一段连续序列数字反转;(即 $0$ 变 $1$,$1$ 变 $0$) 2. 询问某个元素的值。 例如当 $n=20$ 时,$10$ 条指令如下: ![](https://i-blog.csdnimg.cn/img_convert/aee31a9ae76606c897004ab49e503dff.png) ## 输入格式 第一行包含两个整数 $n,m$,表示数组的长度和指令的条数。 阅读详情

相关推荐

差分运放电路输出电压偏置设计解析

差分运算放大电路是信号处理中的基础模块,通过差分对管结构实现共模抑制与差模放大。其核心原理基于运放的虚短虚断特性,当电阻网络满足对称条件时,输出电压与输入差分成正比。在工业测量系统中,由于ADC通常仅支持正电压输入,需要通过偏置电路将双极性信号平移至正电压范围。典型设计采用精密基准电压源和匹配电阻网络,既保持信号完整性又满足系统接口要求。本文以-100V高压测量为例,详细解析了分压网络设计、参考电压选取以及电阻匹配等关键技术要点,为传感器接口电路设计提供实践参考。

weixin_35750747的博客 470

对两个字符a和b进行初始化:char a[]="ABCDEF";char b[]={'A','B','C','D','E','F'};则以下叙述正确的是:

对两个字符a和b进行初始化:char a[]="ABCDEF";char b[]={'A','B','C','D','E','F'};则以下叙述正确的是: 正确答案: A   你的答案: 空 (错误) a数组比b数组长度长 a与b长度相同 a与b数组完全相同 a和b中都存放字符串 添加笔记 求解答(5) 收藏 纠错

chengonghao的博客 2万+

新手避坑指南:用COMSOL Multiphysics仿真气体放电(汤逊vs.流注)

本文详细介绍了使用COMSOL Multiphysics仿真气体放电的实战指南,涵盖汤逊理论和流注模型的实现方法。通过对比两种放电模型的关键参数和物理场配置,帮助新手避免常见错误,准确预测气体击穿过程。文章还提供了工程应用案例,如高压绝缘子设计优化,展示了仿真技术在电力设备绝缘设计中的实际价值。

weixin_28716181的博客 473

Leetcode数组简单题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 数组练习前言一、两数之和二、删除有序数组中的重复项三、移除长度四、搜索插入位置五、最大子序和六、加一总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 一、两数之和 leetcode 01 题目链接 第一种暴力的方法直接双for循环时间复杂度为O(N^2) 不太好 代码如下(示例): public int[] t

weixin_51601437的博客 677

DVWA全级别详细通关教程

dvwa全级别详细通关教程,暴力破解,命令注入,CSRF跨站请求伪造,文件包含,文件上传​,SQL注入,XSS

m0_62063669的博客 1万+

从零开始的 AI Infra 学习之路

AI Infra(AI 基础设施)是指为上层的 AI 算法应用提供支持的 AI 全栈底层技术,通过合理利用计算机体系结构,可以实现 AI 计算的加速和部署。AI Infra 主要包括以下内容:AI 训练框架 & 推理引擎;AI 编译 & 计算架构;AI 硬件 & 体系结构。参考资料:;。

AI Infra / LLM / 软件开发 3万+

js对象数组去重,简单数组去重

JavaScript对象数组去重一、对象数组去重方式一二、对象数组去重方式二三、简单类型的数组去重 一、对象数组去重方式一 使用reduce函数。 let arr = [ { key:'1', name:'林青霞' }, { key:'2', name:'张三丰' },

weixin_43242112的博客 1万+

国产操作系统应用迁移与适配

了解国产操作系统的背景及意义

2301_77609559的博客 2678

数组简单的应用

数组简单的应用 运行截图 代码如下: 创建一个cgjfdk类 package com; public class cgjfdk { public static void main(String[]args) { farmer();//调用农民的方法 seller();//调用小商贩的方法 cook();//调用厨师的方法 me();//调用我自己的方法 } //厨师 public static void cook() { System.out.println(“洗菜”); System.out.prin

weixin_50919504的博客 147

unity打包流程整理-Windows/Mac/Linux平台

1.Platform(平台)功能: 选择目标构建的目标平台选项PC, Mac & Linux Standalone: 适用于 Windows、Mac 和 Linux 平台2.Target Platform(目标平台)功能: 选择具体的操作系统版本选项Windows: 针对 Windows 操作系统Mac: 针对 macOS 操作系统Linux: 针对 Linux 操作系统3.Architecture(架构)功能: 选择应用程序的目标处理器架构选项x86: 针对 32 位系统。

weixin_42333247的博客 5136

基于Qt C++开发一套大疆农业无人机的AI飞控系统

如果需要补充**多机协同作业代码**、**农田测绘数据导出**、**作业数据统计大屏**或**移动端地面站适配**功能,可以告知具体需求,我会针对性完善。"开启" : "关闭") << "喷洒,流量:" << flowRate << "L/min";emit errorOccurred(QString("SDK初始化失败,错误码:%1").arg((int)ret));report += QString("问题区域数量:%1\n").arg(info.problemAreas.size());

寒寒豆豆软件公司的博客 381

简单数组

u012500162的专栏 402

如何在 Windows 中实时打开字幕

在 Windows 操作系统中,你可以使用编程来实现实时字幕功能,以便在屏幕上显示即时的文字内容。下面是一个示例代码,展示了如何使用Python编程语言在Windows上实现实时字幕功能。这样,字幕窗口将会不断地显示系统当前时间作为字幕。你可以根据自己的需求修改主循环中的内容,以显示你想要的实时字幕。希望以上代码和说明能够帮助你在Windows中实现实时字幕功能。函数创建了一个顶级窗口,并设置窗口的样式、位置和大小。方法,用于在字幕窗口中显示指定的字幕内容。上述代码中,我们使用了Python的。

DevWizard的博客 3270

手写简单的数组

手写简单的数组 实现查找,添加,删除操作 Array类 package com.company; public class Array { private int[] data; private int size; //构造函数,传入数组的容量capacity构造Array public Array(int capacity){ data =...

weixin_42913025的博客 160

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

创建简单类和数组

1月3号——创建简单类和数组 作业比较简单

lx25413791的博客 170

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java 简单数组_java简单数组定义

public class Shuzu {static int[] array = new int[] { 32, 2, 2, 5, 45, };int[] array1[] = new int[10][20];int[][] array2=new int[2][3];int array3[][] =new int[2][3];int[][] c = new int[][]{{2,2},{3,3},...

weixin_30002151的博客 141

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java 简单实现数组

简单实现数组 public class Array&amp;amp;lt;E&amp;amp;gt; { private E[] array; private int size; //无参构造函数,默认容量为10 public Array(){ this(10); } //有参构造函数 public Array(int capacity){ ...

amy acker的博客 320

简单版数组介绍

数组: 什么是数组:相同类型变量的组合,是一种批量定义变量的方式 定义: 类型 数组名[数量]; int arr[5]; 使用: 使用下标表示数组中的变量 arr[下标]; 下标:从零开始 ,范围:0~数量-1 arr[0],arr[1],arr[2],arr[3],arr[4] ...

wjasonk的博客 487

opencv简单图形数组识别

此处也要考虑线所占的像素数,我们先预知线段的粗细,也就是每个点所占的像素点,在win自带的画图软件中,线段粗细是会显示几个像素点的(鼠标停留一下),可选择1px,这样比较不会影响识别结果,那如果我们不是自己画线段,无法预知线段的粗细,我们可以在代码里加上一句(只是线段,其他形状容易产生误差),首先我们考虑从图像生成的数组进行判断,将图片转化成灰度,然后从图像不等于255的点是否连续出现入手,创建一个图片75x50(横75高50,小一点图片方便看数据),选择1px的画笔,否则容易出现误差。

tundra38的博客 647

使用ES6求两个数组(简单数组或对象数组)的并集,交集和差集

背景 项目中经常有对两个数组的操作,涉及到一些数学中集合的运算. 集合的定义 集合定义:集合是指具有某种特定性质的具体的或抽象的对象汇总而成的集体。其中,构成集合的这些对象则称为该集合的元素 交集定义:由属于A且属于B的相同元素组成的集合,记作A∩B(或B∩A),读作“A交B”(或“B交A”),即A∩B={x|x∈A,且x∈B}, 如右图所示。注意交集越交越少。若A包含B,则A∩B=B,A∪B=A . 并集定义:由所有属于集合A或属于集合B的元素所组成的集合,记作A∪B(或B∪A),读作“A并B”(或“B并

天心天地生的博客 4182

ts:对象数组的简单使用

本文主要说明ts对象数组的简单使用,理解也容易,先理解一般数组的样子,然后把数组中的普通元素变换为对象来理解便可。当然本文对于数组方法未过多讲解,博主会另起博文说明。编写本文主要用于知识回顾使用,后面一回顾可以短时间内捡回知识点。如此如此,这般这般。说实话,ts相关的内容,想把逻辑性的东西用文字表达出来好难!博主原本想从let、var、const这些最简单的变量命名开始编写博文,但发现难以下手,现在更改为从某一部分内容入手,里面添加点其他东西,然后再拓展编写其他东西,如此便有编写的方向。本篇由此产生。

小蜗牛764号的博客 1523

简单数组相关

数组 int a[4]; 我们把这样的一组数据的集合称为数组(Array),它所包含的每一个数据叫做数组元素(Element),所包含的数据的个数称为数组长度(Length),例如int a[4];就定义了一个长度为4的整型数组,名字是a。 数组中的每个元素都有一个序号,这个序号从0开始,而不是从我们熟悉的1开始,称为下标(Index) 将1~10存放在数组中: #include <stdio.h> int main(){ int nums[10]; int i; //将1~10放入数组中 fo

qq_33182418的博客 146

js最简单数组去重_JS简单实现数组去重的方法分析

本文实例讲述了JS简单实现数组去重的方法。分享给大家供大家参考,具体如下:var arr = ['abc','abcd','sss','2','d','t','2','ss','f','22','d'];//定义一个新的数组var s = [];//遍历数组for(var i = 0;iif(s.indexOf(arr[i]) == -1){ //判断在s数组中是否存在,不存在则push到s数组中...

weixin_39605706的博客 96

java 简单数组_java 实现一个简单的数组

package com.clean.array;public class HighArray {private long[] array;private int nElems;public HighArray(int max) {array = new long[max];nElems = 0;}public boolean find(long key) {int j;for(j = 0; j &...

weixin_39959192的博客 104

js最简单数组去重_js数组和数组去重的几种简单的方法

1.证明一个对象是数组的方法。方法(1)[].constructor === Arraytrue[].constructor === 'Array'false方法(2)Object.prototype.toString.call([]) =="[object Array]"以下数js数组去重。====================================================...

weixin_39668282的博客 146
上一篇: 结构体的内存对齐
下一篇: 函数的调用过程(函数栈帧)
H..b.
博客等级 码龄9年 25粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值