我看到几个类似的问题,但他们没有针对我的具体案例的答案。我只需要交换结构数组中两个元素的位置,但到目前为止我尝试过的所有内容都只会复制一个或另一个。我认为问题出在交换功能上。
我需要在不使用标准库函数的情况下执行此操作。这是我拥有的:
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
}
最佳答案
您将浅拷贝与深拷贝混合在一起:
void carSwap(RentalCar *car1, RentalCar *car2) {
RentalCar *carTemp = car1; // shallow copy
carCopy(carTemp, car2); // deep copy: overrides carTemp AND car1
carCopy(car2, car1); // car1 and car2 already have the same values
// original car1 data is lost
}
因为 carSwap
被赋予 RentalCar*
(而不是 RentalCar**
)我们不能改变用户的指针,所以我们必须坚持深拷贝。
我们可以这样做(并且仍然使用其他功能):
void carSwap(RentalCar *car1, RentalCar *car2) {
RentalCar carTemp = *car1;
carCopy(car1, car2);
carCopy(car2, &carTemp);
}
但我们不需要其他功能。我们可以这样做:
void carSwap(RentalCar *car1, RentalCar *car2) {
RentalCar carTemp = *car1;
*car1 = *car2;
*car2 = carTemp;
}
关于c++ - 使用指针交换结构数组中的元素 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50769780/