【问题标题】:Dev C++ gives different result in case of pointer addressDev C++ 在指针地址的情况下给出不同的结果
【发布时间】:2012-01-28 11:20:19
【问题描述】:

我有以下一组代码

int main(){
   int x = 36;
   int const * p1;
   p1 = &x;

   printf("Values at p1: %d\n", *p1); 
   p1=0;

   printf("Addresses pointed to by p1: %p ", &p1); 
   return 0;
}

给予

Addresses pointed to by p1 gives 0028FF480

   int main(){
   int x = 36;
   int const * p1;
   p1 = &x;

   printf("Values at p1: %d\n", *p1); 
   p1=0;

   printf("Addresses pointed to by p1: %p ", p1); 
   return 0;
   }

p1 指向的地址为 00000000

为什么会有这样的差异..?我认为两者都会给我相同的价值。

【问题讨论】:

  • 为什么你认为 p1 和 &p1 应该是一样的?
  • dev-c++ 带有一个古老的编译器。尝试使用 cdt 而不是 dev-c++ 的代码块或 qtcreator 或 eclipse。

标签: c++ dev-c++


【解决方案1】:

最初p1 存储x 的地址(您使用&x 获得)。稍后您将p1 设置为存储空地址。

在第一个 sn-p 中,您决定打印的不是p1存储 的地址,而是p1地址 本身p1 和其他变量一样,是一个变量,就像其他变量一样,&p1 将为您提供该变量的地址。这与存储在其中的值不同,后者可通过p1 访问,并且是第二个 sn-p 打印的内容。

与任何其他变量一样,您无法更改变量p1 的地址,您只能更改它存储的值,而在指针的情况下,恰好该值就是地址。

【讨论】:

    【解决方案2】:

    两者不同,因此输出不同。

    p1 返回指针指向的变量的地址。

    &p1 返回指针p1 本身存储在内存中的地址。

    【讨论】:

    • 而指针 P1 很可能存储在与其指向的位置完全不同的位置。
    【解决方案3】:
    p1=0;
    

    将指向“p1”的指针设置为零,而不是应该由它完成的内容

    *p1=0;
    

    【讨论】:

    • 这是一个你无法做到的常量:)
    • 在您的示例中这是不可能的,但我说它是为了解释差异。这一切都发生了,在第一个示例中,您将指针设置为零并显示它,在第二个示例中,您创建一个新指针并显示其地址。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多