class temp;
temp *t;
void foo() { temp foo2; t[1] = foo2; }
int main() {
t = new temp[100];
foo();
//t[1] is still in memory?
}temp **t;temp **t = new temp[100][1];,是否有更好的方法来做到这一点,不需要4个方括号?发布于 2010-02-19 12:15:48
守则:
t = new temp[100];构造一个类型为temp的数组100对象。做同样事情的更安全的方法是:
std::vector <temp> t(100);这样您就不必在数组上调用delete[]了。
发布于 2010-02-19 12:29:17
尽量避免新的东西,直到你完全知道你在做什么。
std::vector<temp> t(100);将以完美的方式完成这项工作。您仍然可以使用[]操作符在解决方案中访问它。
temp foo2; t[1] = foo2;将调用临时类的赋值运算符。用于将变量传递给函数。
void foo1(std::vector<temp>& lt)
{
}
void foo2(temp& lt)
{
}
foo1(t);
foo2(t[1]);发布于 2010-02-19 13:10:53
首先,我支持其他人的建议,以避免新的和使用std::向量代替。向量避免了由指针和数组引起的许多麻烦。数组在很大程度上是C解决方案,而不是C++解决方案。
要回答您的问题:这里不需要指针类型。原因是数组自然是由指针寻址的。
当你说t = new temp[100];时,会发生两件事:
t设置为指向新数组的第一个元素。当您使用p[i]运算符时,它实际上是*(p + i)的语法糖。例如:
t[0]等价于*(t + 0),它只是*t,或者t指向的元素:数组的第一个元素。t[1]等同于*(t + 1)。因为t是指向数组的第一个元素的指针,所以t + 1是指向第一个元素的指针:第二个元素。所以*(t + 1)给出了第二个元素。使用此系统,可以使用temp *指针引用整个temp数组,而不仅仅是一个temp实例。
如果您真的想了解数组和指针,那么您可以做的比阅读常见问题解答的第6章更糟糕。但是,请注意,这是一个C资源,而不是一个C++资源;这是因为在C++中,数组通常不被使用,因为您有一个更好的可用特性: std::vector。我强烈建议您将学习std::vector作为比学习指针和数组更高的优先级。
https://stackoverflow.com/questions/2296129
复制相似问题