竹逸 发表于 2022-3-15 22:53:56

关于列表,我这么理解可以吗?

本帖最后由 竹逸 于 2022-3-17 00:55 编辑

列表的下标为什么从0开始,而不是从1:

大多数编程语言的约定:

因为计算机只能看得懂二进制数0和1,而0作为最小的数也就被约定成为默认起始值

所以物理内存的起始地址都是从0开始的(用十六进制0x00表示第一个字节,它是内存地址的下标),而列表名指向的就是该列表存储在内存中的首地址(列表名的值是一个指针?)

列表的下标是相对于首地址的偏移量,第一个元素是从首地址0x00开始存储的(相对地址),因为偏移量为0下标自然也就为0

也因为下标是偏移量,也就解释了为什么索引的范围是左闭右开



第一个元素的下标是0(正0),那倒数第一个元素的下标为什么是-1,而不是-0?


因为-0的值也是0,而下标是0的元素是列表中第一个元素,所以倒数第一个元素的下标不能为-0,不然就和第一个元素下标重复,倒数第一个元素就规定为-1,以此类推,倒数第二个元素就是-2……

isdkz 发表于 2022-3-15 23:01:35

完全正确,看来兄弟得道了{:5_106:}

竹逸 发表于 2022-3-15 23:02:21

列表的下标是偏移量,那下标也是一个内存地址?(首地址+偏移量)

6,7年前学过鱼哥的C基础,后来就没学了,还记得一点东西,我这么理解有误吗?

isdkz 发表于 2022-3-15 23:05:26

竹逸 发表于 2022-3-15 23:02
列表的下标是偏移量,那下标也是一个内存地址?(首地址+偏移量)

6,7年前学过鱼哥的C基础,后来就没学 ...

下标不算个地址吧,我觉得下标相当于元素与列表地址的相对位置,

而列表地址是由列表第一个元素的地址来充当的,

就像火车的位置得有个标准,就以火车头为准

竹逸 发表于 2022-3-15 23:07:41

isdkz 发表于 2022-3-15 23:01
完全正确,看来兄弟得道了

谢谢,你的肯定是对我最大的鼓励,我还担心自己会不会理解错了{:5_91:}

竹逸 发表于 2022-3-15 23:11:56

isdkz 发表于 2022-3-15 23:05
下标不算个地址吧,我觉得下标相当于元素与列表地址的相对位置,

而列表地址是由列表第一个元素的地址 ...

既然是相对位置,那也是相对于物理内存地址的位置啊,我觉得也是个内存地址

isdkz 发表于 2022-3-15 23:13:46

竹逸 发表于 2022-3-15 23:11
既然是相对位置,那也是相对于物理内存地址的位置啊,我觉得也是个内存地址

你也可以这么理解,不过内存地址的说法不是针对绝对位置的吗?

竹逸 发表于 2022-3-15 23:22:48

isdkz 发表于 2022-3-15 23:13
你也可以这么理解,不过内存地址的说法不是针对绝对位置的吗?

绝对地址无论是什么,但偏移量是不变的啊

竹逸 发表于 2022-3-15 23:41:56

isdkz 发表于 2022-3-15 23:13
你也可以这么理解,不过内存地址的说法不是针对绝对位置的吗?

我的理解是计算机要读取列表中的某个元素的数据,那自然得先找到存放该元素的物理内存地址,而正好可以通过列表名(是个指针?)+元素的偏移量得到该元素的绝对地址,然后才成功的读取到该元素存放的数据{:5_94:}

isdkz 发表于 2022-3-15 23:43:27

竹逸 发表于 2022-3-15 23:41
我的理解是计算机要读取列表中的某个元素的数据,那自然得先找到存放该元素的物理内存地址,而正好可以通 ...

好吧{:5_106:}

竹逸 发表于 2022-3-16 00:15:43

本帖最后由 竹逸 于 2022-3-16 00:17 编辑

isdkz 发表于 2022-3-15 23:43
好吧

思考了下,我觉得你是对的,偏移量只是个十六进制数,但不是内存地址,只有当元素进行读取运算的时候才会拿取该偏移量+首地址组成一个真正的物理内存地址

isdkz 发表于 2022-3-16 07:20:04

本帖最后由 isdkz 于 2022-3-16 07:22 编辑

竹逸 发表于 2022-3-16 00:15
思考了下,我觉得你是对的,偏移量只是个十六进制数,但不是内存地址,只有当元素进行读取运算的时候才 ...

嘻嘻,学习就是要不断地推倒重建{:5_108:}

wp231957 发表于 2022-3-16 07:24:37

相比c语言而言,列表最nb的是切片,推导式,各种方法,而这些c都需要自己写代码去实现

竹逸 发表于 2022-3-16 11:07:48

wp231957 发表于 2022-3-16 07:24
相比c语言而言,列表最nb的是切片,推导式,各种方法,而这些c都需要自己写代码去实现

是的{:10_254:}

竹逸 发表于 2022-3-16 11:20:32

本帖最后由 竹逸 于 2022-3-16 23:37 编辑

0000

竹逸 发表于 2022-3-16 11:49:55

本帖最后由 竹逸 于 2022-3-16 23:32 编辑

0000

竹逸 发表于 2022-3-16 14:40:20

本帖最后由 竹逸 于 2022-3-16 14:44 编辑

0000
页: [1]
查看完整版本: 关于列表,我这么理解可以吗?