В сущности, он просто говорит компилятору: «Поверь мне. Я знаю, что делаю».Чаще всего программист ошибается.Если вы используете только приведение только для подавления предупреждений, то вы делаете что-то серьезно неправильно.А * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * *} * * * * * * * * *} * * * * * * * * * * 1006 * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * *} * * * * * * * * 100} * 1006должно.И это здесь.
Вот пример того, как это может пойти не так:
#include <stdio.h>
struct myStruct {
char a, b, c, d;
};
int main(void)
{
struct myStruct s = { 'a', 'b', 'c', 'd' };
int* p = &s.b;
printf("%c %c %c %c\n", s.a, s.b, s.c, s.d);
*p=42;
printf("%c %c %c %c\n", s.a, s.b, s.c, s.d);
}
Вывод:
$ ./a.out
a b c d
a *
То, что произошло здесь, это потому, чтоint
- это четыре байта, он перезапишет три других байта при записи в s.b
.Это s.c
, s.d
и еще один байт, о котором мы ничего не знаем.Нетрудно понять, что это может вызвать нежелательные эффекты.