Я учусь на экзамен, и я наткнулся на это выражение. Я прочитал пару книг и заметок, и до сих пор я не сталкивался с этим, и я даже не знаю, как назвать это, поэтому я не смог найти ответ.
Вот оно.
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
}
}
Опять же, если я не знаю что-то основное...... ну, я не знаю, потому что я все еще учился :) помогите мне, пожалуйста. Благодарю.
typedef struct {
...
} byte, *pByte;
определяет структуру с byte
псевдонимов и определяет псевдоним pByte
для byte*
, так что вы можете использовать его следующим образом:
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);
Type *p;
объявляет указатель, и это очевидно. TypeP p;
? Хм ... У них, однако, есть одно особое качество. byte* pB, pC;
не объявляет два указателя, тогда как pByte pB, pC;
делает Однако это не является существенным преимуществом, поскольку первый даже не скомпилируется, если вы попытаетесь использовать pC
как указатель. Т.е. вы поймете эту ошибку во время компиляции (обычно).
pByte
, BytePtr
и т. Д.), Я думаю, он все еще в порядке. Иначе это действительно противная штука.