我对此有一些想法,但我想要更专业、更有经验的解释。
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/