设为首页 加入收藏

TOP

6.2.2 寻找地址
2013-10-07 00:48:45 来源: 作者: 【 】 浏览:54
Tags:6.2.2 寻找 地址

6.2.2 寻找地址

对计算机内存有了简单直观的印象之后,我们再来看看在幕后发生的一些事情。要想知道某个变量在内存里的存放地址,需要在变量名的前面加上一个"取地址"操作符(&):

  1. int myVar = 23409;  
  2. std::cout << "The address of myVar is " 
  3. << &myVar << "\n"

在默认的情况下,内存地址将显示为十六进制数字(如图6-7所示)。如果想把内存地址显示为比较容易看懂的十进制整数,可以把它转换为unsigned long整数类型:

  1. std::cout << "The address of myVar is " 
  2. << (unsigned long) &myVar << "\n"
 
图6-7 内存地址是一些十六进制数字

C++(www.cppentry.com)提供了一些更好的办法来把内存地址转换为无符号整数类型,本章下一节会讲解它们。就眼下来说,我们先用这种简单的地址转换语法。)

为了让大家对地址有进一步的了解,我们来编写一个简单的示例程序,它将创建几个变量,再找出它们的内存地址。

寻找地址

1.在文本编辑器或IDE里创建一个空白的新文本文档(代码清单6-2)。

  1. // address.cpp - Script 6.2  
  2. #include <iostream> 

代码清单6-2 这个程序将创建5个变量,然后输出它们的地址

  1. 1   // address.cpp - Script 6.2  
  2. 2     
  3. 3   #include <iostream>  
  4. 4     
  5. 5   int main() {  
  6. 6     
  7. 7       // Create some variables.  
  8. 8       int a = -12;  
  9. 9       float b = 78.53;  
  10. 10      char c = 'D';  
  11. 11      unsigned long d = 1904856026;  
  12. 12      int e = 9002356;  
  13. 13        
  14. 14      // Print the addresses.  
  15. 15      std::cout << "The address of a is " 
  16. 16      << (unsigned long) &a << "\n";  
  17. 17      std::cout << "The address of b is " 
  18. 18      << (unsigned long) &b << "\n";  
  19. 19      std::cout << "The address of c is " 
  20. 20      << (unsigned long) &c << "\n";  
  21. 21      std::cout << "The address of d is " 
  22. 22      << (unsigned long) &d << "\n";  
  23. 23      std::cout << "The address of e is " 
  24. 24      << (unsigned long) &e << "\n";  
  25. 25    
  26. 26      std::cout << "Press Enter or Return to continue.\n";  
  27. 27      std::cin.get();  
  28. 28    
  29. 29      return 0;  
  30. 30        
  31. 31  } // End of the main() function. 

2.开始定义main()函数并创建一些变量。

  1. int main() {  
  2.     int a = -12;  
  3.     float b = 78.53;  
  4.     char c = 'D';  
  5.     unsigned long d = 1904856026;  
  6.     int e = 90023; 

为了有所对比,我们将使用图6-6中的变量。我们还使用了不同的类型以了解这对寻址操作的影响。

3.输出各个变量的地址。

  1. std::cout << "The address of a is " 
  2. << (unsigned long) &a << "\n";  
  3. std::cout << "The address of b is " 
  4. << (unsigned long) &b << "\n";  
  5. std::cout << "The address of c is " 
  6. << (unsigned long) &c << "\n";  
  7. std::cout << "The address of d is " 
  8. << (unsigned long) &d << "\n";  
  9. std::cout << "The address of e is " 
  10. << (unsigned long) &e << "\n"

利用在本节正文里描述的语法,先把这些地址转换为一个unsigned long整数,再输出它们。

4.完成main()函数。

  1. std::cout << "Press Enter or Return to continue.\n";  
  2. std::cin.get();  
  3. return 0;  

5.把这个文件保存为address.cpp,然后编译并运行这个程序(如图6-8所示)。

6.如果有可能,在另一台计算机上编译并运行这个程序(如图6-9所示)。

 
图6-8 在一台Mac OS X系统上运行这个程
序将显示每个变量的地址(十进制整数)
 
图6-9 不同的计算机会给变量分配不同的地址。
图中是在一台Windows系统上运行这个程序的结果。
注意,图中的地址是按降序(从高往低)分配的

"提示

虽然可以把一个地址转换为一个整数,但不应该把它保存在另一个整数变量里。如果想把一个地址存入一个变量,就应该使用指针--马上就要讲到。

变量的地址在程序执行期间是不会发生变化的。这是一项很自然的要求,不这样就没办法使用变量了。不过,同一个程序里的同一个变量在这个程序前、后两次运行时的地址往往会发生变化。

函数也保存在内存里,这意味着我们可以查出某给定函数在内存中的地址。这需要用到&functionName语法(functionName是函数的名字)。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6.2.5 指针和数组(1) 下一篇6.2.5 指针和数组(2)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: