使用结构体与指向结构体的指针

Dav*_*542 3 c pointers

我正在研究以下示例,以了解直接传递对象和然后传递指向它的指针之间的差异:

#include "stdio.h"

// Car object
typedef struct Car {
    char*           name;
    unsigned int    price;
} Car;

void print_car(Car car) {
    printf("<Car: %s, Price: $%d>", car.name, car.price);
};

void print_car2(Car *car) {
    printf("<Car: %s, Price: $%d>", car->name, car->price);
};

int main(int argc, char* argv[]) {

    Car chevy = {chevy.name = "Chevy", chevy.price = 45000};
    print_car(chevy);

    Car mazda = {chevy.name = "Mazda", chevy.price = 30000};
    print_car2(&mazda);

    return 1;

}
Run Code Online (Sandbox Code Playgroud)

除了第一种方法对我来说更具可读性和更容易理解之外,两者之间还有什么区别?什么时候传递指针是唯一的选择,为什么在上述情况下两者都有效?

klu*_*utt 5

使用第二种方法有两个原因:

  1. 如果你想避免复制整个结构。如果结构很大,这可能会影响性能。
  2. 如果你想修改你正在传递的结构。