使用指针c ++

时间:2018-06-09 00:06:47

标签: c++

我看到了几个类似的问题,但他们对我的具体案例没有答案。我只需要在结构数组中交换两个元素的位置,但到目前为止我尝试的所有内容都只会复制其中一个。我认为问题在于交换功能。

我需要在不使用标准库函数的情况下执行此操作。这就是我所拥有的:

struct RentalCar {
    int year;
    char make[STRLEN];
    char model[STRLEN];
    float price;
    bool available;
};

void carCopy(RentalCar *dest, RentalCar *source) { // dest = source
    dest->year = source->year;
    myStrCpy(dest->make, source->make);            // copy c-strings
    myStrCpy(dest->model, source->model);
    dest->price = source->price;
    dest->available = source->available;
}

void carSwap(RentalCar *car1, RentalCar *car2) {
    RentalCar *carTemp = car1;
    carCopy(carTemp, car2);   // tried different orders, only copy no swap
    carCopy(car2, car1);
}

char *myStrCpy(char *dest, const char *source) {    // copy cstring
    char *origin = dest;                            // non iterated address
    while (*source || *dest) {
        *dest = *source;
        dest++;
        source++;
    }
    return origin;  // could return void instead
}

2 个答案:

答案 0 :(得分:1)

carSwap中,carTemp是指向与car1相同的内存位置的指针。这条线

carCopy(carTemp, car2);   // tried different orders, only copy no swap

使用car1覆盖car2

carSwap更改为:

void carSwap(RentalCar *car1, RentalCar *car2) {
    RentalCar carTemp;
    carCopy(&carTemp, car2);
    carCopy(car2, car1);
    carCopy(car1, &carTemp);
}

答案 1 :(得分:1)

  

我只需要交换数组中两个元素的位置   结构[...]

最简单地回答这个问题,在您的情况下,似乎可以使用浅拷贝来完成,因为您的结构中的所有内容都是浅层可复制的。例如。如果你想在数组中交换位置i和j:

RentalCar tmp = array[i];
array[i] = array[j];
array[j] = tmp;

我错过了什么吗?我读了你的代码,但在回答你的问题时似乎并不重要。告诉我,如果我错过了什么。

注意,如果你有一个指针数组(对于RentalCar),那么这可以做得更好:没有RentalCar的tmp结构。