【问题标题】:C++ Pointers. How to assign value to a pointer struct?C++ 指针。如何为指针结构赋值?
【发布时间】:2011-01-20 17:41:11
【问题描述】:

我有以下结构:

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

然后我创建一个汽车类型的指针

car *tempCar;

如何为 tempCar 赋值?我遇到了麻烦

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

编译器一直说 tempCar 是 car* 类型。我不确定我做错了什么

【问题讨论】:

    标签: c++ c pointers struct


    【解决方案1】:

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

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

    另外,如果您使用这样的指针,请不要忘记为 tempCar 分配内存。这就是“新建”和“删除”的作用。

    【讨论】:

    • 这里不一定要分配内存。指针可能指向堆栈上的本地结构。 car ferrari; tempCar = &ferrari;
    • 请注意,由于明确的 typedef 结构,它可能是 C 代码。
    【解决方案2】:

    您必须首先取消引用指针(以获取结构)。

    要么:

    (*tempCar).make = "GM";
    

    或者:

    tempCar->make = "GM";
    

    【讨论】:

      【解决方案3】:

      tempCar->vin = 1234

      解释很简单:car*car 上的一个指针。这意味着您必须使用运算符-> 来访问数据。对了,car*要使用就必须分配。

      另一种解决方案是使用诸如car tempCar; 之类的声明。 car 结构现在在堆栈中,只要您在此范围内,您就可以使用它。通过这种声明,您可以使用tempCar.vin 访问数据。

      【讨论】:

      • 声明一个实例(与 car tempCar; 一样)可以很容易地在堆栈上,不一定是 static
      • 我知道我的句子不清楚,我的意思是静态分配与动态分配相反:) 谢谢
      【解决方案4】:

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

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

      否则以这种方式声明tempCar:car tempCar;

      【讨论】:

        【解决方案5】:

        将您的汽车 *temp 更改为以下行:

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

        【讨论】:

        • 根据 c++ 标准的未定义行为。 new 应该用于 C++ 中的原始动态内存分配,而不是 malloc。
        【解决方案6】:

        各位,用new的时候要小心,这不是Java,是C++,没有参数的时候不要用括号:tempCar = new car;

        【讨论】:

        • 为什么要“小心”?这是一个风格问题,我绝对不同意:使用括号。
        • 不是风格问题。使用括号,POD 类型中的成员将是默认构造的。根据我的经验,括号通常是首选。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-09
        • 2011-10-27
        • 2010-09-11
        • 2019-07-10
        • 1970-01-01
        相关资源
        最近更新 更多