在 C 语言中,给定数组本身的地址,如何获得数组元素的地址?

AAA*_*eef 1 c pointers memory-address

*编辑以澄清该数组未知

如果未知整数数组的地址是0x00006ffd29c78e70(整数为4字节),则元素数组[1]的地址是多少?

提前谢谢了。

abl*_*igh 5

数组的地址也是其第一个元素的地址。这是因为内存中的数组本身仅依次包含其每个元素(从索引 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
Run Code Online (Sandbox Code Playgroud)

或使用指针算术

int *A = (int *)0x00006ffd29c78e70;
int *A1 = A+1; // points to second element
int foo = *A1; // second element contents 
Run Code Online (Sandbox Code Playgroud)

请注意,+1不会向(字节)地址加一,而是将指针递增 1 int

注意我在上面已经写过int- 使用正确的整数数据类型来表示 4 字节整数。