关于列表,我这么理解可以吗?
本帖最后由 竹逸 于 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…… 完全正确,看来兄弟得道了{:5_106:} 列表的下标是偏移量,那下标也是一个内存地址?(首地址+偏移量)
6,7年前学过鱼哥的C基础,后来就没学了,还记得一点东西,我这么理解有误吗?
竹逸 发表于 2022-3-15 23:02
列表的下标是偏移量,那下标也是一个内存地址?(首地址+偏移量)
6,7年前学过鱼哥的C基础,后来就没学 ...
下标不算个地址吧,我觉得下标相当于元素与列表地址的相对位置,
而列表地址是由列表第一个元素的地址来充当的,
就像火车的位置得有个标准,就以火车头为准 isdkz 发表于 2022-3-15 23:01
完全正确,看来兄弟得道了
谢谢,你的肯定是对我最大的鼓励,我还担心自己会不会理解错了{:5_91:} isdkz 发表于 2022-3-15 23:05
下标不算个地址吧,我觉得下标相当于元素与列表地址的相对位置,
而列表地址是由列表第一个元素的地址 ...
既然是相对位置,那也是相对于物理内存地址的位置啊,我觉得也是个内存地址 竹逸 发表于 2022-3-15 23:11
既然是相对位置,那也是相对于物理内存地址的位置啊,我觉得也是个内存地址
你也可以这么理解,不过内存地址的说法不是针对绝对位置的吗? isdkz 发表于 2022-3-15 23:13
你也可以这么理解,不过内存地址的说法不是针对绝对位置的吗?
绝对地址无论是什么,但偏移量是不变的啊 isdkz 发表于 2022-3-15 23:13
你也可以这么理解,不过内存地址的说法不是针对绝对位置的吗?
我的理解是计算机要读取列表中的某个元素的数据,那自然得先找到存放该元素的物理内存地址,而正好可以通过列表名(是个指针?)+元素的偏移量得到该元素的绝对地址,然后才成功的读取到该元素存放的数据{:5_94:} 竹逸 发表于 2022-3-15 23:41
我的理解是计算机要读取列表中的某个元素的数据,那自然得先找到存放该元素的物理内存地址,而正好可以通 ...
好吧{:5_106:} 本帖最后由 竹逸 于 2022-3-16 00:17 编辑
isdkz 发表于 2022-3-15 23:43
好吧
思考了下,我觉得你是对的,偏移量只是个十六进制数,但不是内存地址,只有当元素进行读取运算的时候才会拿取该偏移量+首地址组成一个真正的物理内存地址 本帖最后由 isdkz 于 2022-3-16 07:22 编辑
竹逸 发表于 2022-3-16 00:15
思考了下,我觉得你是对的,偏移量只是个十六进制数,但不是内存地址,只有当元素进行读取运算的时候才 ...
嘻嘻,学习就是要不断地推倒重建{:5_108:} 相比c语言而言,列表最nb的是切片,推导式,各种方法,而这些c都需要自己写代码去实现 wp231957 发表于 2022-3-16 07:24
相比c语言而言,列表最nb的是切片,推导式,各种方法,而这些c都需要自己写代码去实现
是的{:10_254:} 本帖最后由 竹逸 于 2022-3-16 23:37 编辑
0000 本帖最后由 竹逸 于 2022-3-16 23:32 编辑
0000 本帖最后由 竹逸 于 2022-3-16 14:44 编辑
0000
页:
[1]