栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言深度解析一维、二维数组(用指针操作取出数组中的值)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言深度解析一维、二维数组(用指针操作取出数组中的值)

这里对于一维数组就不从下标开始讲起了,直接讲他要注意的点:一维数组的类型为  int [10]

一维数组
int arr[10]={1,2,3,4,5,6,7,8,9,10};
arr //代表数组 首元素 的 地址
&arr //代表 整个数组 的 地址
&arr[0] //代表数组 首元素 的地址 

以这个为例子: 一维数组的类型为  int [10] 类型

注意:

虽然 &arr 与 arr 代表的意义不同 但是 他们在内存中的地址是一样的 (很关键,在二维数组中会发现的) 

下面我们来验证一下:

因为数组中的 数据保存是在一块连续的空间中的因此我们能看到,这里 int 类型是四个字节 。

arr 为首元素地址        arr + 1 为下一元素的地址  分别对他们 * (解引用) 可以得到他们值

&arr 为整个数组的地址 但是我们能看得出 他与 arr 的 地址 的 值 ,是一样的,但是 &arr + 1 之后跳过的是 40 个字节。由此可见他们的意义完全不同。

二维数组

要知道在计算机中是没有二维这个概念的,二维这个概念是人赋予他的(便于人去理解),计算机实际中他还是一个一维数组 我们可以通过直接打印的方式看出来,他并不会自动去分 行 和 列。

以这个为例子:

(可以看成是  两个元素个数为 3 的一维数组 放在另一个 一维数组里面)

因此 (一维数组){1,2,3} 就是 二维数组 arr 的第一个元素  (一维数组){4,5,6}就是第二个元素。由此我们可以得到要注意的地方与 一维数组 一致。

int arr[2][3]={{1,2,3},{4,5,6}};
arr //二维数组 首元素 的地址
&arr //整个二维数组 的地址
&arr[0] //二维数组 首元素 的地址

下面我们来验证一下

arr 与 &arr 的地址一致,而 arr +1 跳过了12 个字节 ,&arr + 1 跳过了 24 个字节 也就是 跳过了整个 二维数组 ,

 那么加入现在我要取 3 这个数应该是这样的   *(*arr+2)

解释:

arr 是二维数组 首元素 的 地址,而 首元素 是一个 (一维数组) ,那么这个首元素的 地址 就是整个 ( 一维数组的地址)所以要对其进行 解引用 操作 拿到这个 一维数组 的 首元素 的 地址 (类似于  *&arr=arr )再加二就可以拿到 2 这个数的地址,对其 解引用 可以 得到 2 这个值了。

从类型上看 arr 的类型是 int (*) [3] 类型  (是一个指针变量),而 *arr 的类型是 int [3] 类型 

最后希望这篇文章能帮助到刚学C语言的同学们,如果有错漏的地方也欢迎指出哦!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027119.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号