0

I'm trying to create a priority queue using an array of queues, each index of the array being a priority. I tried the following solution,

The queue data type contains an array llist,

Queue *q_create(int size)
{
struct queue *p;
struct q_head *h;
int i;

if ((p = (struct queue *)malloc(sizeof(struct queue))) != NULL) {
    p->size = size;
    for (i = 0; i < PRIODIFF; i++) {
        h = &(p->llist[i]);
        h->head = NULL;
        h->tail = NULL;
    }
}
return p;
}

I'm confused by the line: h = &(p->llist[i]); I was thinking that llist[i] = h. Is this another way of writing it in C? I'm reading it as h = the address of llist[i]. Is this correct?

Thanks

tmyklebu
  • 13,915
  • 3
  • 28
  • 57
bond425
  • 1,077
  • 1
  • 7
  • 12

2 Answers2

2

I'm reading it as h = the address of llist[i] Is that correct?

Yes.

YXD
  • 31,741
  • 15
  • 75
  • 115
1

Yes, you should read that as assign the address of p->llist[i] to h. This is not the same as llist[i] = h.

This code is using h as a short-hand to avoid having to type p->llist[i] twice for the two subsequent lines.

Emil Sit
  • 22,894
  • 7
  • 53
  • 75