涉及http://c-faq.com/aryptr/aryptr2.html。
char a[] = "hello";
char *p = "world";
创建一个名为"a"的数组。该变量只是指向第一个内存地址的标签。 p是一个变量(==另一个内存地址的标签),包含第一个字符(w - 可能在内存中的其他地方)的地址。 我不明白这个主题中的例子(谢谢!): 使用extern将数组与指针链接。
extern1.c
extern int *array;
int test();
int main(int argc, char *argv[])
{
printf ("in main: array address = %x\n", array);
test();
return 0;
}
extern2.c
int array[10] = {1, 2, 3};
int test()
{
printf ("in test: array address = %x\n", array);
return 0;
}
为什么extern1中的指针变量"extern int *array"(相当于一个内存地址标签,包含另一个地址)已经包含了array[0]的内容?
与此有何区别?
int array[10] = {1, 2, 3};
int *ptrArrWorking = array; // == &array[0];
在外部情况下,它可能是这样的。
int array[10] = {1, 2, 3};
int *ptrArrNotWorking = array[0];
编辑:为了更明确,让我们将上面的示例解释为
int array[10] = {1, 2, 3};
int *ptrArrNotWorking = (int *)array[0];
因此,这模拟了在外部示例中可以看到的相同行为。
间接寻址在哪里隐藏?
非常感谢。
&array [0]
,这与array
相同。 - Ajay Brahmakshatriyaint*
,并且名称与数组相同。因此它们是同一物体。 - Ajay Brahmakshatriya