指针与其地址之间的差异

时间:2015-12-26 18:16:48

标签: c arrays pointers

我只是想揭开C和指针的秘密(再次),我有一个关于指针和腐朽的问题。这是一些代码:

#include <stdio.h>

int main() {
    int array[] = { 1, 2, 3 };
    int (*p_array)[] = &array;

    printf("%p == %p == %p\n", array, &array, &array[0]);
    printf("%p == %p\n", p_array, &p_array);

    return 0;
}

当我运行时,我得到了这个输出:

  

0x7fff5b0e29bc == 0x7fff5b0e29bc == 0x7fff5b0e29bc

     

0x7fff5b0e29bc == 0x7fff5b0e29b0

我知道array, &array, &array[0]都是一样的,因为它们会衰减到指向完全相同位置的指针。

但这是如何应用于实际指针的,这里是*p_array,它是指向int数组的指针,对吧? p_array应指向存储数组的第一个int的位置。但为什么p_array的位置不等于&p_array

也许这不是最好的例子,但如果有人能启发我,我将不胜感激......

编辑: p_array是指数组中第一个元素的地址,而&p_array是指p_array指针本身的地址。 / p>

一切顺利, 大卫

3 个答案:

答案 0 :(得分:3)

  

我知道数组,&amp;数组和数组[0]都是相同的,因为它们会衰减到指向完全相同位置的指针。

没有。你不明白。 array是数组类型,在大多数情况下将转换为指向其第一个元素的指针。因此,除array运算符的操作数外,&array[0]sizeof与表达式相同。 &array是数组array的地址,类型为int (*)[3]。详细阅读此处:What exactly is the array name in c?

p_array是指向数组array的指针并存储其地址,而&p_arrayp_array的地址。

答案 1 :(得分:2)

  

但为什么p_array的位置不等于&p_array

&p_array是指针本身的地址(0x7fff5b0e29b0),而p_array是指向array的指针,其值是array的地址 1 ,(0x7fff5b0e29bc)。

1。第一个元素的地址。功能

答案 2 :(得分:0)

您只是介绍了另一个变量。因此它具有值(0x7fff5b0e29bc)和地址(0x7fff5b0e29b0)。对于你引入的任何变量都是如此