0

我正在为考试而学习,我遇到了这个声明。我已经阅读了几本书和笔记,到目前为止我还没有遇到过这个,我什至不知道该怎么称呼它,所以我无法找到答案。

就这样吧。

 typedef struct {
         unsigned a: 4;
         unsigned b: 4;
 } byte, *pByte;// what does *pbyte means here?

int main(){
pByte p = (pByte)x; // this is typecasting void pointer. how does it work with *pbyte
 byte temp;
 unsigned i;

 for(i = 0u; i < n; i++) {
         temp = p[i]; //again I have no idea why we suddenly have array
 }
}

再说一次,如果我不知道一些基本的东西......好吧,我不知道,因为我还在学习:) 请帮帮我。谢谢。

4

1 回答 1

1
typedef struct {
    ...
} byte, *pByte;

定义了一个带有别名的结构体,并为byte它定义了一个别名,以便您可以通过以下方式使用它:pBytebyte*

byte b;
pByte pB = &b;

这也相当于:

byte b;
byte* pB = &b;

因此,如果您有一个void指针x(这有点可疑,如果可能的话,您应该尽量避免void*首先使用)并且您知道它指向n结构数组的第一个元素:

pByte p = (pByte) x;          // casts x back to the correct type
byte temp;

然后

temp = p[i];

是可能的并且等效于(指针算术):

temp = *(p + i);
于 2013-10-24T19:38:49.027 回答