C++指针。如何给指针结构赋值?

23

我有以下结构体:

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*类型,我不确定自己做错了什么。

6个回答

36

您需要在指针上使用“->”运算符,如下所示:

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

此外,如果您像这样使用指针,请不要忘记为tempCar分配内存。 这就是“new”和“delete”的作用。


5
在这里,您不一定需要分配内存。指针可能指向堆栈上的本地结构体。car ferrari; tempCar =&ferrari; - Seth
请注意,由于明确地使用了typedef结构体,这可能是C代码。 - alternative

16
你需要先取消指针引用(以获取结构体)。
要么:
(*tempCar).make = "GM";
或者:
tempCar->make = "GM";

5

tempCar->vin = 1234

这个表达式很简单: car* 是一个指向 car 的指针。这意味着你必须使用操作符 -> 来访问数据。另外,如果你想使用它,car* 必须被分配。

另一种解决方案是使用类似于 car tempCar; 的声明。现在 car 结构体位于堆栈上,只要在此作用域内,就可以使用它。使用这种类型的声明,你可以使用 tempCar.vin 来访问数据。


声明一个实例(例如**car tempCar;*)可以很容易地放在堆栈中,并且不一定是静态的*。 - NVRAM
我知道我的句子不太清晰,我是指静态分配与动态分配相对 :) 谢谢 - Nicolas Guillaume

1

你的tempCar是一个指针,那么你必须为它分配内存并像这样进行赋值:

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

否则可以这样声明tempCar:car tempCar;


-1
将您的车*temp更改为以下行:
 car *tempCar = (car *)malloc(sizeof(car));

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

根据C++标准,未定义的行为。在C++中应该使用new来进行原始动态内存分配,而不是malloc。 - M.M

-2

大家在使用new时要小心,这不是Java,而是C++,当你没有参数时不要使用括号:tempCar = new car;


2
为什么要“小心谨慎”?这是一个风格问题,我绝对不同意:使用括号。 - NVRAM
2
不是风格问题。使用括号,POD类型中的成员将被默认构造。根据我的经验,通常建议使用括号。 - GManNickG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接