c - 指针 - 转换为结构指针 + Malloc

标签 c pointers casting malloc sizeof

我对此有一些想法,但我想要更专业、更有经验的解释。

typedef struct{
     char str[50];
     unsigned short num;
}s;

s *name = (s *) malloc(sizeof(s));

第一部分定义了一个结构体。我对此没有问题
这将创建一个指向“s”结构的指针。 malloc() 返回一个内存地址,该地址将被转换为指向“s”的指针。但是,sizeof(s) 我相信我在理解方面遇到了一些问题。

char str[50]; = 50 字节。
unsigned short num; = 2 个字节。

sizeof(s) 返回 52 个字节?

malloc(sizeof(s)) 分配 52 个字节并返回首地址并将其转换为指向“s”的指针?

还有一个问题! 如何使用内联 malloc 执行错误处理?

感谢任何可以帮助澄清这一点的人!

最佳答案

  • 在C 中,我们不需要转换malloc 的返回值。 malloc 返回 void*,而在 C 中,void* 隐式转换为您指定的任何类型...
  • sizeof(s) 返回的值取决于填充,也取决于实现(因为,sizeof(unsigned short) 在不同平台上会有所不同... ).
  • 在C语言中,如果要检查错误,必须将malloc的返回值与NULL进行比较。

    如果(名称==NULL)退出(1);//退出失败

关于c - 指针 - 转换为结构指针 + Malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21227695/

相关文章:

c - 修改二进制文件中的记录

c - 如何在C中读取和覆盖文本文件?

c++ - 函数指针的取消引用是如何发生的?

c - 为什么将 "extern puts"转换为函数指针 "(void(*)(char*))&puts"?

c - 我的指针错误在哪里?

任何人都可以详细解释以下 c 中的指针程序吗?

c - "' X ` may be uninitialized in this function"警告和 pthread,C

c++ - 错误 : Undefined first referenced symbol in file

java - 是什么导致了 "Incompatible operand types"错误?

c++ - 使用带引用的函数作为带指针的函数?