如何在C中给出数组本身的地址来获取数组元素的地址?

时间:2017-01-19 17:24:57

标签: c pointers memory-address

*编辑以澄清数组未知

如果未知整数数组的地址是0x00006ffd29c78e70(整数是4个字节),那么元素数组[1]的地址是什么?

非常感谢提前。

4 个答案:

答案 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)

如果0x00006ffd29c78e70int的有效数组的地址,那么您可以将其分配给指针:

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