yangzhiqian1980
驱动牛犊
驱动牛犊
  • 注册日期2003-06-07
  • 最后登录2003-08-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:859回复:1

结构体指针的困惑

楼主#
更多 发布于:2003-08-06 11:59
对于C语言的精华---指针..我的了解算是一知半解了..,所以我只能快乐而困惑学习编程
望诸位大侠指点以下代码的意思
typedef struct
{
    // Status register
BYTE BSY :
    1;
BYTE DRDY :
    1;
BYTE DF :
    1
BYTE ERROr:
    1
 } Status, *pointerStatus; // pointerStatus 应该是个指向结构体的指针变量
 void GetDeviceStatus( pointerStatus ds )
{ //这是什么意思呢??难道让ds指向结构体吗?? 如果就这样目的的话,可以
 // void GetDeviceStatus(  Status *ds )啊
 {
    BYTE * ptr = ( BYTE* ) ds; //这里我就更看不懂了! (BYTE*) ds 与BYTE * ds 一样吗??
    ptr[ 0 ] = ataReadAlternateStatusReg(); //晕,ptr什么时候变成数组了?? 因为BYTE * ptr 只是
定义一个指向字节型的指针变量而../
    ptr[ 1 ] = ataReadInterruptReasonReg();
    ptr[ 2 ] = ataReadErrorReg();
}
}
蓝心
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝1
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-06 12:57
1、pointerStatus ds 与 Status *ds 是一样的。一般的结构类型的定义都会有两个类型,一个是 “结构类型”,一个是 “结构指针 类型”。
2、(BYTE*) ds 是一个强制类型转换,把它转换成BYTE 指针类型,为了后面操作的方便。
3、因为 ds 中的内容是连续存放的,所以可以用数组的形式访问。
但我觉得你的 ptr[] 会访问出界,因为你的结构中是一些位域,它总共只占一个字节。
你的认可是对我最大的鼓励!
游客

返回顶部