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语言的同学们,如果有错漏的地方也欢迎指出哦!

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值