关于如何理解数组

C语言浅理解——数组 学生的学籍号码,球场上运动员身上的号码······在生活中我们经常遇到相同类型的事物聚集在一起,比起逐个去叫他们的名字,我想大家更喜欢简单点统称为“号码”,更加简单明了。为了提高效率而把具有相同相同类型的数据有序地组织起来的一种形式就称为——数组。简单来说,数组是一组相同类型的元素的集合。 阅读详情

关于如何理解数组


今天把之前的笔记整理下方便以后查阅。记得当时为了描述这个问题,折腾了很久.下面就总结归纳一下:

数组名是不占空间的.

   列:
   int a[10];
   printf("%d", a);
   printf("%d", &a);

上面的输出是一样的.

指针是占用空间的.

int b[10];
int *p;
p = b;
printf("%d", p);
printf("%d", &p);

上面的输出是不一样的.


下面开始重点部分:多维数组.
实际上我是不建议理解成多维数组的.内存都是线性的,仅此而已.大家可以看看下面这个例子.

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

发现共同点了么?
a的长度是根据定义的获得的.b同样也是.不过a的每个元素是一个int,
而b的每个元素是一个数组.

多维数组还提供另外一个理解方式,如下:

int arr_1[4][10];
int a[10];
int b[10];
int c[10];
int d[10];
int *arr_2[4] = {a, b, c, d}; //指针数组

则: arr_1 + 1 = arr_2 + 1
此时该指针是第一维度中的一个元素的地址
*(arr_1 + 1) = *(arr_2+ 1) = b
虽然做了解引用,但是取得的值依然是一个指针,不过维度就到达了第二维度,就是指向长度为10的数组的第一个元素
*(arr_1 + 1) +1 = b + 1
此时指针指向第二维中的第一个元素
*(*(arr_1 + 1) +1) = *(b+ 1) = b[1]
这次就真正获得其中的一个值了

虽然可以这么理解,但是依然要记住指针和数组是不一样的.

1.上面的2中表达方式,所需要的内存是不一样的.第一种为sizeof(int)X4X10,第二种为sizeof(int)X4X10 + sizeof(int *)X4.
2.例如你使用arr_1[1][11]这样的方式访问,可以依赖编译器检查出错误.而当你使用arr_2[1][11]这样的方式访问的时候,编译器将没有任何警告.可怕的内存泄露!


高级部分:

int array[4][10];
int **p;
p = array;  //报错
int (*p1)[9];
p1 = array; //报错
int (*p2)[10];
*p2 = array;    //正确

所以简单的说多维数组就是多级指针是有误的.从p2可以看出来,你必须正确匹配类型,这里是包含10个int元素的数组.这也就解释了为什么声明数组的时候只能省略第一维度.


参考书籍《C专家编程》

统信UOS V20 安装mysql5.7.42详细教程 到bin/下,执行下面的命令,初始化mysql服务信息,得到数据库的初始密码,实际如果目录不一样记得换成自己的目录。下载后通过远程将安装包上传至服务器,我这里将安装包上传至/usr/local/mysql 下。ps:这时候如果还是不能远程访问的话,可能是防火墙的原因,命令行执行以下命令即可。再次登录,发现缺少 libtinfo.so.5文件,再次建立软连接。登录,发现报错,提示缺少libncurses.so.5文件,使用。创建 /var/lib/ 下mysql目录。登录成功,修改密码,设置远程访问。 阅读详情

相关推荐

神经网络基础概念总结(小白入门自用)

神经网络人工神经网络多层感知机激活函数反向传播算法损失函数权值初始化正则化方法 人工神经网络 人工神经元:人工神经元是人工神经网络的基本单元。模拟生物神经元,人工神经元有1个或者多个输入(模拟多个树突或者多个神经元向该神经元传递神经冲动);对输入进行加权求和(模拟细胞体将神经信号进行积累和树突强度不同);对输入之和使用激活函数计算活性值(模拟细胞体产生兴奋或者抑制);输出活性值并传递到下一个人工神经元(模拟生物神经元通过轴突将神经冲动输入到下一个神经元)。 人工神经网络:大量的人工神经元以某种链接方式得来的

qq_42011158的博客 648

数组(简单的理解)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、数组是什么?数组的特点二、使用步骤1.新建数组2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导.

qq_45727940的博客 9656

如何获取SAP BTP账户及BAS启用

返回到 Service Marketplace 点击SAP Business Application Studio 然后go to Application。进入子用户的OverView里面找到Entitlements添加SAP Business Application Studio。注意:在选购BTP免费环境的时候,使用人要选公司才可以成功。在完成上述操作后,就可以登陆Cockpit。这里有SAP官方的BTP试用的手顺链接。配置权限※我绑定的是登录时的邮箱。※过程中有问题可以在评论区讨论。

wangshulong2013的博客 723

《数据结构与算法》知识小结(5)

在学习完堆栈与队列的内容后,我们接着学习了数组与矩阵的内容。 数组的定义:数组是是n(n>1)个相同数据类型的数据元素a0,a1,a2,…,an-1构成的占用一块地址连续的内存单元的有限序列。数组中任意一个元素可以用该元素在数组中的位置来表示,数组元素的位置通常称作数组的下标。 数组和线性表一样都是若干个相同数据类型的数据元素a0,a1,a2,…,a0-1构成的有限序列,但不同的是数组要求其元素占用一块地址连续的内存单元空间,而线性表无此要求;且线性表的元素是逻辑意义上不可再分的元素,而数组中的每个元素还可

weixin_44541247的博客 391

在Keil下完成一个汇编程序的编写

在学习STM32的路上开始是学的C语言尚未进行对汇编进行学习,因此抽出时间来学习一下在keil下的汇编语言。

Liu-FE的博客 1万+

niushop靶场漏洞查找-文件上传漏洞等(超详细)

发现报错,而且这个报错十分熟悉,与我们所学的sqli报错注入特别像。这里查询到后面的url有且仅有一个,目测估计是后台。上传的图片是包含一句话木马的图片。发现获取到了webshell。实战漏洞-niushop。

qq_59020256的博客 1727

一文读懂:什么是数组

Java是一种面向对象的编程语言,提供了许多数据结构来处理和组织数据。其中,数组是一种常见且强大的数据结构,**是存放在连续内存空间上的相同类型数据的集合**。

清晨qc的博客 654

Allegro输出光绘文件规范

添加钻孔表的具体步骤为:1.通过屏幕右边的Visibility选项的Views列表,将Drill层打开2.将Visibility选项中的PIN和Via选项都选中,见下图所示: 参数设好之后关闭NC Drill/Parameters窗口,输出数控机床钻孔文件的命令菜单为:Manufacture=>NC=>NC Drill…,打开的窗口如下: 输出数控机床钻孔文件的具体步骤为: 上图是光绘输出的层控制窗口,还有一个窗口是输出参数的控制窗口,我们通过点击上图的第二个列表项General Parameters来

axingxiansen的博客 2808

数据结构之多维数组理解

1、最基本的理解是:数组中的数组 2、最形象的理解是: 一维数组就象一行字。 二维数组就象一页字。 三维数组就象一本书中的字。 四维数组就象一套书中的字。 五维数组就象书柜中多套书中的字。 六维数组就象图书馆多个书柜多套书中的字。 七维数组是一个城市的图书馆藏书中的字 八维数组是一个国家的图书馆藏书中的字 九维数组是一个洲所有国家的图书馆藏书中的字 十维数组是地球上...

weixin_30678821的博客 307

AutoSAR MemMap模块概述及配置参数详解

这个模块是干啥的?它是用来配置Memory Mapping and Compiler Abstraction module。

4508

分布式计算Ray框架:从入门到精通完全教程

想象一下,你有一个机器学习模型要训练,数据集大到让你的笔记本电脑直冒烟;或者你需要并行跑几百个爬虫任务,但线程池和多进程搞得你头晕眼花。传统的单机计算已经hold不住这些场景,分布式计算应运而生。然而,传统的分布式框架(如Hadoop、Spark)要么配置复杂,要么对动态任务支持不佳。这时候,Ray闪亮登场!Ray是一个开源的分布式计算框架,专为高性能、灵活性和易用性而生。它最初由UC Berkeley的RISELab团队开发,目标是让开发者用最少的代码实现分布式任务。无论是数据处理、机器学习,还是仿真任务

大模型大数据攻城狮的专栏 1318

算法与数据结构之数组(Java)

所谓数组,是有序的元素序列。如将有限个类型相同的变量的集合命名,那么这个名称就是数组名。数组是用于存储多个相同类型数据的集合。通常用Array表示,也称之为线性表

m0_58476313的博客 1274

【QNX+Android虚拟化方案】125 - 如何创建android-spare镜像

【QNX+Android虚拟化方案】125 - 如何创建android-spare镜像

|~~~热爱生活、努力学习的小伙汁~~~| 1092

关于数组的个人理解

这是今天我在思考问题的时候理解到的关于三维数组甚至多维数组的理解。 我在网上看了很多,有很多种思维。 第一种理解思维: 一维可以理解成“由点堆积成的线” 二维可以理解成“由线堆积成的正方形” 三维可以理解成“由正方形堆积成的正方体” 四维可以理解成“由正方体堆积成的超立方体” 但是我认为这种理解虽然前面一目了然,但是到了多维数组的时候,理解有点抽象(原谅我脑子想象力不足),这种是用维

lSky_Forever的博客 2015

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

如何理解三维数组

array[a][b][c] 含义:可以理解为该数组有a页,每一页都有一个b行c列的二维数组

天射手座的博客 6844

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

python数组维度怎么看_numpy数组维度理解终结版

写在前面可能你会不相信,我是从玩pytorch中过来的,我觉得有必要记录一下,transpose这个坑还非踩不可,为了说的清楚一点儿,我多铺垫一点儿,先说说numpy数组维度的理解引子>>> a = np.arange(start=0, stop=24)array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1...

weixin_39620099的博客 7875

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

简单理解【指针数组】与【数组指针】

2024-07-22 笔记 - 4。

仟墨(郑龙浩)的博客 1252

理解三维数组

array[2][2] 相当于两个一维数组 array[3][2][2] 类比可知,相当于3个 2 * 2 的二维数组 可以将三维数组比作一个立方体,这个立方体底面是个2*2的正方形,高为3,如下图所示。 注意:三维数组的高维度是写在最前面的,也就是立方体的z #include <stdio.h> int main() { int array[3][2][2] = {0,1,2,...

Erya Programming learning 1万+

指针数组理解

指针数组理解 开发工具与关键技术:Visual Studio、C++ 作者:张国军 撰写时间:2019年05月06日 指针数组的元素类型是指针。 指针数组的元素存放对象的地址。 说明形式为:类型 * 标识符 [ 表达式 ] ; 先让我们来看一个实例,它用到了一个由 3 个整数组成的数组: #include using namespace std; const int MAX = 3; i...

weixin_44545509的博客 2190

高维数组对象的理解

高维数组对象的理解。

rylrmr的博客 815

理解复杂的数组声明

数组能存放大多数类型的对象,例如,数组可以存放指针;又以为数组本身就是一个对象,所以可以定义数组的指针或者数组的引用。 举一些例子: int *ptrs[10]; //含有10个指向int类型指针的数组 int &refs[10]; //错误,引用不是对象 int (*ptrs)[10];//指向含有10个int型对象的数组的指针 int (&refs)[10]; //含有10...

feng_shaoxia的博客 310

对于高维数组抽象性质的理解

对于高维数组抽象性质的理解

qq_40163600的博客 248

matlab 思维数组_MATLAB中对多维数组的理解

今天在用MATLAB的时候发现的一个有趣的现象,就是它的多维数组。现在开始举栗子:现在我们创建了一个二维数组:>> a=[2 4 6;1 8 9;9 6 1]a =2 4 61 8 99 6 1然后我们为它升维,将它升至三维:>> a(:,:,2)=[1 2 3;4 5 6;7 8 9]a(:,:,1) =2 4 ...

weixin_39562089的博客 903

numpy数组参数的正确理解

推荐阅读这篇前先阅读该篇文章numpy数组的坐标轴问题。接下来我们讨论讨论关于一个二维数组中参数的正确理解。先来看一段代码: import numpy as np x = np.array([[1, 3], [5, 6], [8, 10]]) print(x[0, 0]) print(x[0, 1]) """ 1 3 """ 我们可以看到输出结果分别为1,3。我不知道有没有人像我以前一样的理解,x轴是横向,y轴是纵向,于是x[0, 0]对应第一个

u011699626的博客 737

python 数组维度的顺序_numpy数组维度理解终结版

写在前面可能你会不相信,我是从玩pytorch中过来的,我觉得有必要记录一下,transpose这个坑还非踩不可,为了说的清楚一点儿,我多铺垫一点儿,先说说numpy数组维度的理解引子>>> a = np.arange(start=0, stop=24)array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1...

weixin_39807859的博客 1369

怎么理解三维数组?

/*#include <iostream> using namespace std;*/ #include <stdio.h> #include <string.h> int a[100][10][10];/*三维数组 存储第i个学校 第j支队伍 的第k个队员*/ int main() { int n, i, j, k; scanf("%d", &n); int m[110];/*每个学校队伍数量*/ /*注意这里的一个小问题??? 第二.

weixin_44769957的博客 6653
上一篇: Android 判断用户2G/3G/4G移动数据网络
下一篇: Android取消EditText自动获取焦点默认行为
YLBF_DEV
博客等级 码龄12年 30粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值