也许我的例子会让人们产生困惑。我试图理解代码的一部分并简化它。这是原始代码的一部分(再次简化...:))(请参见下面的原始帖子)。
uint16_t hal_nrf_read_multibyte_reg(uint8_t *pbuf)
{
uint8_t memtype;
memtype = *(uint8_t*)(&pbuf);
if (memtype == 0x00U)
{
uint8_t data *buf = (uint8_t data *)pbuf;
DOTHIS
}
if (memtype == 0x01U)
{
uint8_t xdata *buf = (uint8_t data *)pbuf;
DOTHAT
}
if (memtype == 0xFEU)
{
uint8_t pdata *buf = (uint8_t data *)pbuf;
DOSOMETHING
}
return SOMETHING;
}
void main()
{
uint8_t payload[3];
hal_nrf_read_multibyte_reg(payload);
while(1) { }
}
我在想,为什么他们要将已经是uint8_t的pbuf进行转换。但现在我想我已经找到了答案。
------------ 旧帖子 -------------
我正在研究Nordic Semiconductors nRF24LE1。
如果我有以下测试代码。
void tempF(int *test)
{
int varA;
int varB;
int varC;
varA = *(int*)(&test); // The way it is done in the source code
varB = *(&test);
varC = test;
printf("A: %x\n", varA);
printf("B: %x\n", varB);
printf("C: %x\n", varC);
printf("C1: %x\n", test);
if (test == 0x00)
printf("equals 0x00");
}
int main(void) {
int myArray[3];
tempF(myArray);
return 0;
}
所有的printf都给出了相同的答复。 为什么要这样做“varA-style”?在何种情况下需要这样做?
如果按照varA的方式进行操作,我就不会收到“警告C260:'=':指针截断”的警告。
var
的类型不是int *
吗? - Mohit Jain%p
格式说明符进行打印,不需要在中间进行任何转换。 - Lundin