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