The question is to describe what the code does, what the function does.
The following code is part of the past exam papers for a 2nd year C and C++ module. The task is to describe what the following piece of code does. I’ve written the code exactly as presented, with some comments added by myself.
int g(int * y, unsigned size, int z) {
int tmp = y[0];
// what type is unsigned size? Int I presume. Why would you add an int to an array of ints?
int * b = y + size;
y[0] = z;
// I have the most difficulty understanding the following.
while (1) if (*(--b)==z){y[0] = tmp; return b - y;};
// are the following 3 lines ever even reached?
y[0] = tmp;
if (tmp == z) return 0;
else return -1;
}
It’s an
unsigned intcalledsize. You add it to a pointer as in normal pointer arithmetic – advance this pointer to the very end of the array.OK, we’ve got
while(1)= while(true), or ‘loop forever’*(--b)pre-decrement b and read the value from that index of the arrayb-y– pointer arithmetic for the array index we’re ati.e. we’re scanning backwards through the array to find the last instance of
zand returning the index at which we found it. We will always findzin the array because we put it there as the first element, i.e. ifzisn’t in the array then we return 0.No, I don’t think so.