在C 中删除指向结构的指针
Derefencing a pointer to a struct in C++
我是C 的新手,并且正在尝试弄清楚如何将指针放到struct,以便我可以检索该结构中成员的值。在buildcar()中,我希望能够打印汽车的年份以及汽车的规格(设置时,它将是指向另一个结构的指针)。我能够打印出存储CAR1结构的内存地址,但是我很难弄清楚用于尊重此指针的正确语法。我已经尝试使用(*)进行放电,而 ->而不是。指代结构的成员,但到目前为止还没有运气。任何帮助都将受到赞赏。谢谢!
struct item {
int id;
void *myData;
};
struct car {
unsigned int year;
char* specs;
};
void buildCar(item item1);
int main() {
struct item item1;
item1.id = 1;
struct car car1;
car1.year = 2019;
item1.myData = &car1;
buildCar(item1);
}
void buildCar(item item1){
cout << "address of car1 = " << item1.myData;
}
我很难弄清楚用于尊重此指针的正确语法。
您不能通过空隙指针间接。您只能通过非空隙指针间接。
解决方案:更改指针的类型:
struct item {
int id;
struct car *myData;
};
然后,您可以使用间接成员访问操作员->
。
大概还有其他类型的物品,因此可能需要一个void *。
在纯C 中,根据使用要求,有更好的替代方案,例如继承,std::variant
和std::any
。
鉴于芒果在评论中提到了标头是C,因此可能没有更好的选择,而void*
确实是必要的。
在这种情况下,可以将空隙指针转换回原始指针类型,该指针类型从使用static_cast
转换为空隙指针。转换为错误类型的行为将不确定,因此必须小心。
所以,让我们从一个基础知识开始:在C 结构中是默认为公共的类。
您看起来像C,所以我假设这是您的基础语言。
这意味着您可以访问结构中的全部行为配置的全部广度。
因此,您可以将其重写:
struct Car {
unsigned int year;
char* specs;
Car(int year) : year(year) {} //Constructor
};
struct Item {
int id;
Car *myData;
Item(int id, Car* car) : id(id), myData(car) {} // Constructor
~Item() { delete myData; } // Destructor. This prevents a potential data leak.
void buildCar() { std::cout << "address of car1 = " << myData; } // Member Function
};
int main() {
Item item1(1, new Car(2019));
item1.buildCar();
}
如果您想知道其中有些内容是什么,请查找构造函数语法,构造函数初始化器列表和new
运算符,它们对于C 很重要。
相关文章:
- 如何在 C# 中映射双 C 结构指针?
- C++:映射结构中的结构指针
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- 类的静态结构指针声明在C++
- 在两个.cpp文件之间定义全局类/结构指针
- 返回对常量结构(指针类型)成员的引用:明显的左值到右值转换
- 是否可以将无符号字符数组reinterpret_cast到仅包含C++中无符号字符成员的结构指针
- 如何在地图中使用结构指针
- 结构指针在"新"调用上给出已分配的地址?
- 铸造结构指针指向C 的工会指针
- c++ 结构指针在初始化为 NULL 时无法读取内存
- 函数中的结构指针的地址为0x1
- C 用结构指针初始化结构
- C 结构指针铸成数组Interop C#
- 方法中不允许访问结构指针
- 如何打印出结构指针
- MPI_Op_create:候选功能不可行.自定义结构指针不能解释为空指针
- 尝试将结构指针传递给类时出错
- 初始化结构指针的值
- 使用 pybind11 将自定义结构(指针向量)从 C++ 传递到 python 的方法是什么?