malloc(sizeof(ptr)) 和 malloc(sizeof(ptr*)) 的区别?
Difference between malloc(sizeof(ptr)) and malloc(sizeof(ptr*))?
我想知道这两行有什么区别:
queue* f=(queue*)malloc(sizeof(queue));
queue* f=(queue*)malloc(sizeof(queue*));
这里是队列的定义:
typedef struct queue
{
int arr[N];
int tail;
}queue;
提前致谢!
不同的是第二行错了;它分配了足够的 space 来将 指针 存储到 queue
,而不是 queue
本身,但它被分配给一个假设它指向的类型space 足够 queue
.
Neither one requires a cast,所以正确的形式是:
queue *f = malloc(sizeof(queue));
为了更安全,不要引用类型本身,而是引用你分配给的变量,以避免重复类型(如果类型更改可能导致维护问题);这也意味着 sizeof
doesn't need parentheses:
queue *f = malloc(sizeof *f);
我想知道这两行有什么区别:
queue* f=(queue*)malloc(sizeof(queue));
queue* f=(queue*)malloc(sizeof(queue*));
这里是队列的定义:
typedef struct queue
{
int arr[N];
int tail;
}queue;
提前致谢!
不同的是第二行错了;它分配了足够的 space 来将 指针 存储到 queue
,而不是 queue
本身,但它被分配给一个假设它指向的类型space 足够 queue
.
Neither one requires a cast,所以正确的形式是:
queue *f = malloc(sizeof(queue));
为了更安全,不要引用类型本身,而是引用你分配给的变量,以避免重复类型(如果类型更改可能导致维护问题);这也意味着 sizeof
doesn't need parentheses:
queue *f = malloc(sizeof *f);