Вот наткнулся на очередное своё заблуждение
Код
void rtc_clr(rtc_t* rtc) // no good
{
for (unsigned char i=0; i<sizeof(rtc_t); i++)
{
*(unsigned char*)rtc++ = 0;
}
}
void rtc_clr(rtc_t* rtc) // good
{
unsigned char* p = (unsigned char*)rtc;
for (unsigned char i=0; i<sizeof(rtc_t); i++)
{
*p++ = 0;
}
}
void rtc_clr(void* rtc) // good with void* ???
{
for (unsigned char i=0; i<sizeof(rtc_t); i++)
{
*(unsigned char*)rtc++ = 0;
}
}
Первый вариант очищает память как решето через промежутки равные sizeof(rtc_t) пишет нолики.
А второй и
третий вариант делают то, что нужно (байт в байт асмовый листинг).
Что тут происходит с приоритетностью оператора ++ и оператора (unsigned char*) и как её меняет
void*?