设为首页 加入收藏

TOP

9.3.2 地址操纵
2013-10-07 15:03:19 来源: 作者: 【 】 浏览:73
Tags:9.3.2 地址 操纵

9.3.2  地址操纵

与大多数人的观点相反,C++(www.cppentry.com)语言定义并没有保证类型为void*的变量可以指向程序地址空间的任意位置。特别地,指向函数的指针就不能可移植地转化为void*:

  1. void g();  
  2.      int main(){  
  3.           void*q = (void*)g;        //不可移植的  
  4.           //...  
  5.      }  

只有在那些sizeof(void*)的大小足够容纳下函数指针的平台上,试图把函数指针转化为void*类型的操作才有可能是成功的。因此,对于一个包含这类转型的程序库,在某些平台或许可以正确地编译和执行,在另一些平台可能就会出现奇怪的行为,在其他一些平台也可能是不能编译的。

另外,某些程序员试图使用long类型的变量来存储和操纵内存地址,但这种做法也是不可移植的-long类型的大小也可能容纳不下一个指针。譬如,当下面的代码执行后:

  1. char x[10];  
  2.     long addr = (long)x;  
  3.     char* p = (char*)addr;  

p并不一定指向x[0]。实际上,在大多数平台 中,p都不会指向x[0]。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇9.3 不确定的行为 下一篇Java中的异常对程序效率有无影响

评论

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