1.7 KiB
4. Suppose that the following declarations are in effect:
struct point {int x, y; };
struct rectangle { struct point upper_left, lower_right; };
struct rectangle *p;
Assume that we want
p
to point to a rectangle structure whose upper left corner is at(10, 25)
, and whose lower right corner is at(20, 15)
. Write a series of statements that allocate such a structure and initialize it as indicated.
struct rectangle rect = { { 10, 25 }, { 20, 15 } };
p = ▭
5. Suppose that
f
andp
are declared as follows:
struct {
union {
char a, b;
int c;
} d;
int e[5];
} f, *p = &f;
Which of the following statements are legal?
(a) p->b = ' ';
(b) p->e[3] = 10;
- Legal
(c) (*p).d.a = '*';
- Legal
(d) p->d->c = 20;
7. The following loop is supposed to delete all nodes from a linked list and release the memory that they occupy. Unfortunately, the loop is incorrect. Explain what's wrong with it and show how to fix the bug.
for (p = first; p != NULL; p = p->next)
free(p);
The above loop won't function because it deallocates the entry, then attempts to access the pointer to the next item, after it's already been freed.
A functional example might look like this:
struct entry* p = first;
while (p != NULL) {
void *current = p;
p = p->next;
free(p);
}
9. True or false: If
x
is a structure anda
is a member of that structure, then(&x)->a
is the same asx.a
. Justify your answer.
True: The arrow operator is used to access a member of a struct through a pointer. (&x)
creates a pointer to the x
struct, therefore the arrow operator can be used to access fields on x
.
13.