malloc(sizeof(ptr)) 和 malloc(sizeof(ptr*)) 的区别?

LEA*_*NER 1 c pointers dynamic-memory-allocation

我想知道这两行有什么区别:

 queue* f=(queue*)malloc(sizeof(queue));
Run Code Online (Sandbox Code Playgroud)
 queue* f=(queue*)malloc(sizeof(queue*));
Run Code Online (Sandbox Code Playgroud)

队列的定义如下:

typedef struct queue
{
    int arr[N];
    int tail;
}queue;
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Sha*_*ger 7

不同的是第二行是错误的;它分配足够的空间来存储一个指针queue,不是queue本身,而是它分配给假定它指向足够的空间了整整一个类型queue

两者都不需要 cast,所以正确的形式是:

queue *f = malloc(sizeof(queue));
Run Code Online (Sandbox Code Playgroud)

为了更安全,不要引用类型本身,而是引用您要分配给的变量,以避免重复类型(如果类型更改可能会导致维护问题);这也意味着sizeof不需要括号

queue *f = malloc(sizeof *f);
Run Code Online (Sandbox Code Playgroud)