This question looks incomplete. Typically a delete() method in C would have the existing array and its size passed into the function. The size parameter can be omitted if the array is null-terminated. In C, I would expect a function signature like:
struct PersonCar* deletePersonCar (char* persName, char* carModel, struct PersonCar* carArray, int numCars)
If this code is written in C++ rather than C, I would expect the deletePersonCar() method to be an instance method for a class, with the PersonCar array and the size included as instance variables in the class.
The general approach described in the text will work but will not be terribly efficient. Basically what you would do is allocate a new array of PersonCar with malloc/calloc (in C) or new (in C++), and copy all of the elements except the matching one to the new array. You can do a linear or binary search of the existing array to determine whether there is a matching element. Make sure to handle the case where there is no match, and (in C++) to decrease the size of the array. Also consider whether/when to delete the returned PersonCar element when it is no longer used.