web-dev-qa-db-ja.com

C ++ポインター。ポインタ構造体に値を割り当てる方法は?

私は次の構造体を持っています:

typedef struct{
    int vin;
    char* make;
    char* model;
    int year;
    double fee;
}car;

次に、carタイプのポインターを作成します

car *tempCar;

TempCarに値を割り当てるにはどうすればよいですか?私は困っています

        tempCar.vin = 1234;         
        tempCar.make = "GM";
        tempCar.year = 1999;
        tempCar.fee = 20.5;

コンパイラーは、tempCarはタイプcar *であると言い続けます。何が悪いのか分かりません

17
user69514

次のように、ポインタで->演算子を使用する必要があります。

car * tempCar = new car();
tempCar->vin = 1234;
tempCar->make = "GM";
//...
delete tempCar;

また、このようなポインタを使用している場合は、tempCarにメモリを割り当てることを忘れないでください。これが「新規」と「削除」の機能です。

28
Aric TenEyck

最初にポインタを逆参照する必要があります(構造体を取得するため)。

どちらか:

(*tempCar).make = "GM";

または:

tempCar->make = "GM";
13
Seth

tempCar->vin = 1234

説明は非常に単純です。car*carへのポインタです。つまり、データにアクセスするには、演算子->を使用する必要があります。ちなみに、使用する場合はcar*を割り当てる必要があります。

他の解決策は、car tempCar;などの宣言を使用することです。 car構造体がスタック上にあるため、このスコープ内にいる限り、それを使用できます。この種の宣言では、tempCar.vinを使用してデータにアクセスできます。

5

TempCarはポインタであり、そのためにメモリを割り当てて、次のように割り当てる必要があります。

tempCar = new car();
tempCar->vin = 1234;         
tempCar->make = "GM";
tempCar->year = 1999;
tempCar->fee = 20.5;

それ以外の場合は、tempCarを次のように宣言します:car tempCar;

1
coelhudo