给定数组本身的地址,如何在 C 中获取数组元素的地址?
How do you get the address of array elements given the address of the array itself in C?
*编辑以澄清数组未知
如果未知整数数组的地址是0x00006ffd29c78e70(一个整数是4字节),元素数组[1]的地址是多少?
非常感谢。
数组的地址也是它第一个元素的地址。这是因为内存中的数组本身仅由它的每个元素(从索引 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 字节整数。
如果 0x00006ffd29c78e70
是 int
的有效数组的地址,那么您可以将它分配给一个指针:
int *p = (int*)0x00006ffd29c78e70;
然后 p[1]
将为您提供该数组中的下一个元素(第二个)。
元素位于
unsigned char *addressofarray = whatever;
unsigned char *secondelement = addressofarray + sizeof arrayelement;
unsigned char *nthelement = addressofarray + n * sizeof arrayelement;
你刚刚得到一个指针来访问数组中的任何内容:
int *ptr = (int*) 0x00006ffd29c78e70;
您可以访问任何元素:
*(ptr+i) //i is the index
*编辑以澄清数组未知
如果未知整数数组的地址是0x00006ffd29c78e70(一个整数是4字节),元素数组[1]的地址是多少?
非常感谢。
数组的地址也是它第一个元素的地址。这是因为内存中的数组本身仅由它的每个元素(从索引 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 字节整数。
如果 0x00006ffd29c78e70
是 int
的有效数组的地址,那么您可以将它分配给一个指针:
int *p = (int*)0x00006ffd29c78e70;
然后 p[1]
将为您提供该数组中的下一个元素(第二个)。
元素位于
unsigned char *addressofarray = whatever;
unsigned char *secondelement = addressofarray + sizeof arrayelement;
unsigned char *nthelement = addressofarray + n * sizeof arrayelement;
你刚刚得到一个指针来访问数组中的任何内容:
int *ptr = (int*) 0x00006ffd29c78e70;
您可以访问任何元素:
*(ptr+i) //i is the index