char* ptr 结构体

标签 c

我遇到了一些我不太理解的 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;

//编辑删除字符串部分,因为这并不是问题的重点。

最佳答案

  1. 您可以在指针类型之间进行转换,因为这是语言为您提供的灵活性。但是,您应该谨慎并知道自己在做什么或可能出现问题。

  2. 没有。使用属性指针类型的一个优点是不需要转换。如果这是不可能的,那么使用 void* 并不重要,尽管对于阅读代码的开发人员来说可能会更清楚一些。

关于char* ptr 结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436910/

相关文章:

c - 为什么当我写到数组末尾时我的程序没有崩溃?

c++ - 在第一个可用索引处将对象设置为 C 数组

c - 当进程被终止时,有没有办法让线程从无限信号量等待中出来?

c - 位操作——为前 N 个设置位生成掩码

C:输出带有凯撒密码加密中的符号,为什么? pset2 CS50

c - 如何在 C 字符串中使用美元符号?

java - 如何在1个案例陈述中使用两个要求

c - 如何让 gcc 警告返回局部变量的地址?

c - 在C中的单链表中交换位置

c++ - 在 Mac OS X 上使用 CGL 设置 OpenGL 上下文