【问题标题】:Same address space on CC上的相同地址空间
【发布时间】:2014-02-26 21:46:23
【问题描述】:

我有一个问题,你们中的一些人可以帮助我解决问题

我目前有这段代码(这两个都是全局变量)

    int * x;
    int * y;

现在,在main方法上我要获取这两个的地址空间,如下

    int main ( int argc, char *argv[ ] ){
     printf("%p\n",x);
     printf("%p\n",y);
     system("pause");
     return 0;
     }

在这两种情况下,我都得到 00000000 作为地址空间(好像它们“共享”了相同的地址空间) 我的问题是 1)为什么会得到0的地址空间?因为我们在谈论全局变量,所以它应该采用另一个地址 2)为什么这两个变量应该取000000和000004时却共享内存中的相同空间(假设赋值正确)

提前感谢您的回答

【问题讨论】:

  • %p 需要一个空指针。
  • 全局变量默认初始化为零。
  • 您说的是地址空间,但其他一切都表明您的意思只是地址。 “地址空间”是一个单独事物的技术术语(虽然密切相关),所以我建议你停止这样使用它。

标签: c pointers global-variables memory-address


【解决方案1】:

您正在打印指针的值,即它们指向的地址。在这两种情况下都是 0,因为全局变量被初始化为 0。

如果你想知道指针变量的地址,使用

int main ( int argc, char *argv[ ] ){
 printf("%p\n",&x);
 printf("%p\n",&y);
 system("pause");
 return 0;
}

【讨论】:

  • 就是这样,这是正确的做法,现在我的代码正在返回我需要的值,非常感谢大家!
【解决方案2】:

因为未初始化的全局变量/指针会自动初始化为零/NULL。

【讨论】:

    【解决方案3】:

    1.) 它们都是未初始化的指针。编译器自动初始化全局指针为NULL(地址为0)

    2.) 他们没有共享相同的地址。它们都指向NULL(地址为0)

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 2011-11-21
      • 2012-08-16
      相关资源
      最近更新 更多