c++中如何把指针指向指针

c++ how to put a pointer to a pointer in dvc

本文关键字:指针 c++      更新时间:2023-10-16

我是c++ (java程序员)的新手,我正在做入门课程的家庭作业。目的是"构造函数,动态内存分配和"话虽如此,我还是被其中一个细节困住了。

我创建了两个类颜色,和ColorBox。在指令中指定了ColorBox中的成员变量是int型宽度、int型高度和Color**数据。我的理解是,数据持有一个2D数组的颜色对象的引用…

我的问题是:我如何为DVC中的数据设置某种类型的空值或基本值?有没有人有一个关于这种指针的体面的链接?我发现了关于数组和指针的通用文章,但我仍然很难理解这一点。

提前感谢!

编辑:我想我用下面的代码使它工作了,但我承认我仍然不认为我知道我在做什么。

ColorBlock::ColorBlock()
{
    this->width = 0;
    this->height = 0;
    Color temp_data[1][1];
    this->data = (Color**)temp_data;
}

当您说空或基本值时,我假设您的意思是将变量初始化为安全的默认状态。如果是这种情况,那么您提供的代码在某种程度上是正确的,但可能需要一些工作。

首先,可以像下面这样重写构造函数
ColorBlock::ColorBlock()
{
    this->width = 0;
    this->height = 0;
    this->data = nullptr;
}

这里最重要的变化是数据不再指向您创建的垃圾数据。这很重要,因为当构造函数终止时,所指向的内存将不再是有效内存,但很难检查它是否是垃圾内存。nullptr是c++ 11将指针初始化为安全值的方法,因为它不能指向有效的内存位置(它用于表示指针不指向任何东西),而且它也是类型安全的。

[在c++ 11之前的C和c++标准中,我们将指针初始化为NULL,有关为什么应该使用nullptr的更多信息,请查看此处:使用nullptr的优点是什么?)

另一件需要注意的事情是,正如stargateur在下面指出的那样,您使用了c类型强制转换,这种强制转换功能强大,因为它结合了reinterpret_cast、const_cast和static_cast,但由于同样的原因,它是不安全的。这里你可能想要reiniterpret_cast。 然而,除此之外,还有另一种"更c++"的方式来初始化该数据。
ColorBlock::ColorBlock() : //Note the colon here
    width(0), height(0), data(nullptr)
{ }

关于为什么你会/应该/可以使用这种样式的信息,请参阅以下内容:
为什么我更喜欢使用成员初始化列表?

注:这是我第一次尝试通过这个网站帮助别人,如果我可以改善我的格式或解释,以便更简洁,请指出给我。如果我犯了错误,也请指出来。

编辑:尝试按建议添加更改