*编辑以澄清数组未知
如果未知整数数组的地址是0x00006ffd29c78e70(整数是4个字节),那么元素数组[1]的地址是什么?
非常感谢提前。
答案 0 :(得分:3)
数组的地址也是其第一个元素的地址。这是因为内存中的数组本身仅依次包含其每个元素(从索引0开始)。因此,如果A
是数组,则&A[0]
指向与A
相同的内存。 (注意,整数类型数组和指向整数类型的指针之间存在技术差异,尽管它们在很多情况下是可互换的,因为前者在某些情况下衰退到后者中,这超出了本问题的范围;这是为什么我把它们描述为指向同一个记忆。)
您询问了第一个元素,然后引用了A[1]
。请注意A[1]
是第二个元素。 A[0]
是第一个元素。
所以在你的特定例子中,你可以这样做:
int *A = (int *)0x00006ffd29c78e70;
int *A1 = &A[1]; // points to second element
int foo = *A1; // second element contents
或使用指针算法
int *A = (int *)0x00006ffd29c78e70;
int *A1 = A+1; // points to second element
int foo = *A1; // second element contents
注意+1
不会向(字节)地址添加一个,而是将指针递增一int
。
注意我上面写了int
- 使用正确的整数数据类型来表示你的4字节整数。
答案 1 :(得分:1)
如果0x00006ffd29c78e70
是int
的有效数组的地址,那么您可以将其分配给指针:
int *p = (int*)0x00006ffd29c78e70;
然后p[1]
将为您提供该数组中的下一个元素(第二个)。
答案 2 :(得分:0)
元素在
unsigned char *addressofarray = whatever;
unsigned char *secondelement = addressofarray + sizeof arrayelement;
unsigned char *nthelement = addressofarray + n * sizeof arrayelement;
答案 3 :(得分:0)
你刚刚得到一个指向数组中任何东西的指针:
int *ptr = (int*) 0x00006ffd29c78e70;
您可以访问任何元素:
*(ptr+i) //i is the index