Это хорошая практика для доступа к переменной указателя путем разыменования указателя на указатель, который указывает на другой тип или void
?Может ли это нарушить строгие правила наложения имен?C и C ++ имеют некоторые различия в правилах наложения имен.В этом вопросе мы сосредоточимся на C. Другой вопрос, касающийся C ++, можно найти здесь .В следующем примере к double*
обращаются как void*
.
int create_buffer(void** ptr, ...)
{
*ptr = malloc(...);
...
}
int main(void)
{
double* buffer;
// The problematic code is here, double**
// is coerced to void**, which is later
// dereferenced by the function
create_buffer((void**)&buffer, ...);
...
}
Является ли следующее лучше:
// keeping void** just as an indicator in the interface
// that the pointer is pointing to a pointer to any type
// it could be replaced by just void*
int create_buffer(void** ptr, ...)
{
void* result = malloc(...);
memcpy((void*)ptr, &result, sizeof result);
}