Безопасно ли делать следующее?
aa->a = (uint32_t *)&bb->b;
C позволяет конвертировать между различными типами указателей объекта. А преобразовав значение выражения &bb->b
в тип aa->a
, вы, безусловно, можете присвоить результат aa->a
. В этом смысле само это утверждение безопасно.
Но не безопасен для последующего разыменования aa->a
. Результат этого явно не определен. Поскольку я делаю вывод, что это то, что вы собираетесь делать дальше, нет, ваш общий план небезопасен.
Если вам нужен указатель, который может указывать либо на uint32_t
, либо на uint8_t
, то используйте void *
, либо char *
, либо unsigned char *
. В очень вероятном случае, когда uint8_t
является псевдонимом для unsigned char
, вы также можете использовать uint8_t *
.