Two possible ways come to my mind.
One is writing a function that finds index by name.
#include <string>    
using namespace std;
car *find_by_name(car* cars, const string& name, int from, int to) {
    car* car_ptr = NULL;
    for(int i = from; i < to; i++) {
        if (cars[i].ownerName == name) {
            car_ptr = cars+i;
            break;
        }
    }
    return car_ptr;
}
As you may notice, this function is very expensive (O(n)).
The other one and the easiest one, in my opinion, is using Map or HashMap to do so.
#include <map>
#include <string>
#include <iostream>
using namespace std;
car set_new_val(map<string, car*>& my_map, const string& name, const float price, const int year) {
    car* car_heap = new car();
    car_heap->ownerName = name;
    car_heap->price = price;
    car_hep->year = year;
    my_map.insert(pair<string, car*>(name, car_heap));
}
car* find_car_by_name(const map<string, car*>& my_map, const string& name) {
    map<string, car*>::iterator it;
    if ((it = my_map.find(name)) == my_map.end())
        return NULL;
    return it->second;
}
int main(int argc, char* argv[]) {
    map<string, car*> my_cars_data;
    set_new_val(my_cars_data, "James", 2233000.5, 2013);
    set_new_val(my_cars_data, "Dave", 1222000.5, 2011);
    set_new_val(my_cars_data, "Aaron", 1222000.75, 2012);
    car* james_car = find_car_by_name(my_cars_data, "James");
    cout << "Year " << james_car->year << endl;
    car* null_car = find_car_by_name(my_cars_data, "Santa");
    if (null_car == NULL)
        cout << "No owner with the name Santa is recorded" << endl;
    ...
    ...
    free_map(my_map);
    return 0;
According to C++11, lookup for a key using Map takes O(lgn) (HashMap is O(1)), for more details read here . That's a big pro, if you handle mass of data (not to mention that it is easier to maintain).