gpt4 book ai didi

c - 在 C 中将指针变量作为指向不同类型的指针进行访问

转载 作者:行者123 更新时间:2023-11-30 16:17:43 29 4
gpt4 key购买 nike

通过取消引用指向不同类型或 void 的指针来访问指针变量是否是一种好习惯?这会打破严格的别名规则吗? C 和 C++ 在别名规则方面存在一些差异。在这个问题中我们关注C。考虑C++的另一个问题可以找到here 。在以下示例中,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);
}

最佳答案

不回答你的问题,但你可以通过做一些明确的事情来规避你提到的不确定性:

int main(void)
{
double* buffer;

{
void * pv;
create_buffer(&pv, ...);
buffer = pv; /* C does not need any cast here. */
}

...

关于c - 在 C 中将指针变量作为指向不同类型的指针进行访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56200050/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com