C核心技术手册(三十三)
2011-01-23 19:40
155 查看
4.2.4指针和整型之前的转换
你可以显式地将指针转换为整数类型,反之亦然。此种转换的结果由编译器决定,且与编译器所运行的系统的地址结构有关。指针和整数类型的转换在系统编程中很有用,当程序访问物理地址(例如:ROM、I/O寄存器等)时也会使用。当你将指针转换为一个取值范围没有指针所表示值大的整数类型时,结果是不可定义的,相反地,转换一个整数为指针类型没有必要必须产生一个有效指针,例如:
floatx=1.5F,*fPtr=&x;//Afloat,andapointertoit.
unsignedintadr_val=(unsignedint)fPtr;//Savethepointervalue
//asaninteger.
/*
*OnanIntelx86PCinDOS,theBIOSdatablockbeginsatthe
*address0x0040:0000.
*(CompileusingDOS's"large"memorymodel.)
*/
unsignedshort*biosPtr=(unsignedshort*)0x400000L;
unsignedshortcom1_io=*biosPtr;//Thefirstwordcontainsthe
//I/OaddressofCOM1.
printf("COM1hastheI/Obaseaddress%Xh./n",com1_io);
最后三条语句从系统配置表中读取出硬件信息,假设操作环境允许程序访问内存区,在一个大内存模式下编译的DOS程序中,指针具有32位宽度,在高16位中包含一个段地址和一人低16位的偏移量(通常以segment:offset的形式表示),因而前的biosPtr指针可以使用一个longint型常量初始化。
相关文章推荐
- C核心技术手册(三十三)
- C核心技术手册(三十四)
- C核心技术手册(一)
- C核心技术手册(七)
- C核心技术手册(九)
- C核心技术手册(十一)
- C核心技术手册(二十)
- 《Red5 用户参考手册》之十:Red5 核心技术第三章 自定义流路径
- C核心技术手册(二十九)
- C核心技术手册(三十)
- Spring参考手册-第Ⅰ部分 核心技术(Core)
- C核心技术手册(三十八)
- MySQL核心技术手册 第2版
- C核心技术手册(二十二)
- 《Red5 用户参考手册》之十一:Red5 核心技术第四章 安全
- C核心技术手册(二十八)
- 《Red5 用户参考手册》之十:Red5 核心技术第三章 自定义流路径
- C核心技术手册(三十)
- C核心技术手册(三十八)
- C核心技术手册(四十)