C void主机上的指针

时间:2014-03-27 04:34:44

标签: c pointers void hexdump

我目前正在修改转储程序,但我无法弄清楚如何使用void指针正确导航。下面是我正在使用的功能,以及我尝试执行的指令。我已经尝试将mem转换为结构体,但我不确定sytnax并且我一直收到错误。对于下面的代码,我得到的具体错误是:

       47       |   mem = mem->tcbtio                                    
===========> .........a..............................................
*=ERROR===========> a - CCN3122 Expecting pointer to struct or union.

这是我的功能:

void hexdump(void *mem, unsigned int len)
{                                        
   mem = mem->tcbtio;                     
   ...
}  

以下是我的结构定义:

struct psa {           
 char psastuff[540];   
 struct tcb *psatold;  
        char filler[4];
 struct ascb *psaaold; 

};                     

struct tcb {           
 struct prb *tcbrb;    
 char tcbstuff[8];     
 struct tiot *tcbtio;  
};           

struct tiot {     
 char tiocnjob[8];
 char tiocpstn[8];
 char tiocjstn[8];
};

我需要将它保留为void指针,因为我需要稍后将它转换为char和int。

2 个答案:

答案 0 :(得分:3)

看起来你期望找到一个tcb结构,从mem指向的地址开始,但代码的目的是模糊的,问题不明确。

如果确实如此,你可以试试这个:

   mem = ((struct tcb *)mem)->tcbtio;                     

答案 1 :(得分:0)

您无法取消引用void指针。如果你有一个void指针,你可以这样想,编译器将如何知道它所持有的地址类型。通过mem = mem->tcbtio做出多少补偿。

将您的功能修改为:

void hexdump(void *mem, unsigned int len)
{
   struct tcbtio *mem2;
   mem2 = ((struct tcb*) mem) -> tcbtio;
   ...
   // Use mem2 later
}