软题——数组分配的最后一个字节的内存地址
Soft question - Memory address of the last byte allocated of an array
变量int A[10]
是从HEX地址DDDD04BA
分配的。我想找到分配给数组的最后一个字节的十六进制地址。为什么我们减去 1:
DDDD04BA+28=DDDD04E2
、DDDD04E2-1=DDDD04E1
?还有,为什么A[8]
的第一个字节的HEX地址是DDDD.04BA+32=DDDD04DA
,既然是从A[0]
开始的,不应该是+36
吗?
数组第一个元素的地址是&A[0]=DDDD04BA
元素A[1]的地址是这个值加4
元素 A[i] 的地址是 &A[0]+4*i
最后一个元素 A[9] 位于地址 &A[0]+4*9=&A[0]+36=&A[0]+0x24
A[9]由4个字节组成。首先在地址 &A[9],最后在地址 &A[9]+3
我们得到结果 0xDDDD04BA+0x24+3=DDDD04E1
同理,&A[8]=&A[0]+8*4=0xDDDD04DA
不要忘记索引为 0 的数组,因此要查找元素 i 的地址,只需将 i*sizeof(array_element) 添加到基地址即可。
变量int A[10]
是从HEX地址DDDD04BA
分配的。我想找到分配给数组的最后一个字节的十六进制地址。为什么我们减去 1:
DDDD04BA+28=DDDD04E2
、DDDD04E2-1=DDDD04E1
?还有,为什么A[8]
的第一个字节的HEX地址是DDDD.04BA+32=DDDD04DA
,既然是从A[0]
开始的,不应该是+36
吗?
数组第一个元素的地址是&A[0]=DDDD04BA
元素A[1]的地址是这个值加4
元素 A[i] 的地址是 &A[0]+4*i
最后一个元素 A[9] 位于地址 &A[0]+4*9=&A[0]+36=&A[0]+0x24
A[9]由4个字节组成。首先在地址 &A[9],最后在地址 &A[9]+3
我们得到结果 0xDDDD04BA+0x24+3=DDDD04E1
同理,&A[8]=&A[0]+8*4=0xDDDD04DA
不要忘记索引为 0 的数组,因此要查找元素 i 的地址,只需将 i*sizeof(array_element) 添加到基地址即可。