Если я понимаю ваш вопрос, вы хотите, чтобы экземпляр был защищен const, и вы спрашиваете, достаточно ли написать:
const struct some *azaza = (struct some *)ptr;
Вместо
const struct some *azaza = (const struct some *)ptr;
Я бы сказал, что это так, поскольку атрибут const может автоматически применяться компилятором, но его нельзя убрать. Если бы это был C ++, это был бы минимально достаточный код, но, как уже упоминали другие, в C достаточно написать:
const struct some *azaza = ptr;
Поскольку C позволяет приводить пустой указатель к любому другому типу указателя, то константность может быть выведена. Тем не менее, я думаю, что мандат C ++ делает для более понятного кода.
Обратите внимание, что если у вас уже есть указатель const, вы не можете присвоить его неконстантному указателю без "отбрасывания" const. Чтобы соответствовать спецификации C ++, я бы предпочел поставить 2 приведения, хотя C мог бы принять одно из них:
void foo (const void *ptr) {
struct some *azaza = (struct some *)(void*)ptr;
azaza->some_field = 123; // intentional overwrite!
// ...