linvvavn 发表于 2019-7-16 23:58

萌新求教,关于数组和指针关系

一直弄不大清楚数组和指针的关系,最开始我以为数组名就是个指针,这问题困惑了很久,也许是之前不怎么用心,一直没想出差别来。百度搜出的内容还又臭又长的。
刚刚就想自己写代码测试,测试了以后感觉豁然开朗。瞬间明白了指数和数组的区别。请教下我的想法对不对。

比如我定义一个数组 char a。意思就是我在内存里划出一块10个字节的内存,这块内存被我命名为 a, a 的地址和 a 的值一样。
定义一个 char* p=a,意为划出4个字节的内存,这块内存里储存了 a 的地址,即分配指针类型的内存存储地址,使 p 指向了 a 的开头,可用 *p 访问 a 的值

我原来最大的困惑是以 p 这样的方式访问 a 的元素,跟 a 等同,加上有数组名是个指针的说法,我就以为 a 同 p 是一模一样的。
现在明白了,这里的差别在于,a相当于指针, a就相当于向后移动了 i 个字节。但是 p 实质上应当是   *(p+i) 这样对么?只是C语言允许我们直接简化写成p ,这么理解应该没错的吧?

骑龟赛跑 发表于 2019-7-17 00:11

超市储物柜知道吧?   数组就是那一堆储物柜.
指针就是员工指向储物柜.

boy7928 发表于 2019-7-17 00:15

骑龟赛跑 发表于 2019-7-17 00:11
超市储物柜知道吧?   数组就是那一堆储物柜.
指针就是员工指向储物柜.

比喻+2 很形象

linvvavn 发表于 2019-7-17 00:29

骑龟赛跑 发表于 2019-7-17 00:11
超市储物柜知道吧?   数组就是那一堆储物柜.
指针就是员工指向储物柜.
真的是特别的形象啊。
想问指针 p[ i ] 这样访问数组元素,是不是就是*(p+i)的简写?

hjt1999 发表于 2019-7-17 02:33

数组名就是指向数组首个元素地址的指针吧 指针的++就是前移后移,不影响数组本身的值 理解一下取地址符&的意思就好了

Shark丶XiaoHuai 发表于 2019-7-17 04:35

骑龟赛跑 发表于 2019-7-17 00:11
超市储物柜知道吧?   数组就是那一堆储物柜.
指针就是员工指向储物柜.

大佬请问群组又是什么意思呢?最近突然遇见了百思不得其解

无闻无问 发表于 2019-7-17 08:29

两个方法,一个是下标法,一个是指针法,变量也好,数组也罢,皆是地址…

无闻无问 发表于 2019-7-17 08:32

a和p不一样在于一个地址常量,一个变量…

weliong 发表于 2019-7-17 08:38

骑龟赛跑 发表于 2019-7-17 00:11
超市储物柜知道吧?   数组就是那一堆储物柜.
指针就是员工指向储物柜.

数组=储物柜
指针=储物单
用p或*(p+i) 只是储物单上 编号的不同表达方式而已。

_默默_ 发表于 2019-7-17 08:53

楼主理解没有错    over
页: [1] 2
查看完整版本: 萌新求教,关于数组和指针关系