我遇到了一些我不太理解的 C 代码。下面的代码编译并运行得很好。 1) 为什么我可以将 char* 转换为 struct* ,2) 使用这个习惯用法而不是 void* 有什么优势吗?
struct foo
{
int a;
int b;
char *nextPtr;
};
. . .
// This seems wrong
char *charPtr = NULL;
// Why not
//void *structPtr = NULL;
struct foo *fooPtr;
fooPtr = (struct foo*)charPtr;
//编辑删除字符串部分,因为这并不是问题的重点。
最佳答案
您可以在指针类型之间进行转换,因为这是语言为您提供的灵活性。但是,您应该谨慎并知道自己在做什么或可能出现问题。
没有。使用属性指针类型的一个优点是不需要转换。如果这是不可能的,那么使用 void* 并不重要,尽管对于阅读代码的开发人员来说可能会更清楚一些。
关于char* ptr 结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436910/