[英]How can I access variables stored in the dynamic memory in a different function?
所以我做了一小段代码,询问用户数组的大小和数组的内容(按顺序),并在动态 memory(堆?)中创建数组。
void leesgetallen() {
int *n = new int();
cout << " Wat is de lengte van de Array?" << endl;
cin >> *n;
int g;
int *A = new int[*n];
cout << "Geef de getallen van de Array in stijgende volgorde." << endl;
for (int i = 0; i < *n; i++) {
cout << "Geef getal nummer " << i << " :";
cin >> g;
A[i] = g;
}
cout << "Ter controle, dit is de ingegeven Array: ";
for (int *pa = A; pa != A + *n; pa++) {
cout << *pa << " ";
}
}
就其本身而言,这非常有效。
但是,当我尝试使用该数组 (A) 和所述数组的大小 (*n) 时,它无法识别 A 和 *n。 我不太明白如何使用这些变量,就我的理解而言,如果它们在动态 memory 中它们应该是全局的?
我需要访问它们的原因是因为我想使用不同的 function 来计算输入数组的平均值。
像这样。
int gem(int a[], int n) {
int som = 0;
for (int *pa = a; pa != a + n; pa++) {
som += *pa;
}
int gemiddelde = som / n;
cout << "Het gemiddelde van deze array is: " << gemiddelde << endl;
return gemiddelde;
}
void leesgetallen() {
int *n = new int();
cout << " Wat is de lengte van de Array?" << endl;
cin >> *n;
int g;
int *A = new int[*n];
cout << "Geef de getallen van de Array in stijgende volgorde." << endl;
for (int i = 0; i < *n; i++) {
cout << "Geef getal nummer " << i << " :";
cin >> g;
A[i] = g;
}
cout << "Ter controle, dit is de ingegeven Array: ";
for (int *pa = A; pa != A + *n; pa++) {
cout << *pa << " ";
}
}
int main() {
leesgetallen();
gem(A, *n);
delete *n;
delete[] A;
}
谁能帮我吗?
ps:所有文字都是荷兰语,但我希望这并不重要。
从 function 内部与调用者/外部通信的主要方式:
return
变量。 无论如何,这就是函数的意义所在。 您可以使用std::tuple<>
返回多个变量,或者简单地为返回类型声明一个结构(对于复杂类型来说是首选)。
使其成为成员 function 并更新它所应用的 object。
使用 output 参数(例如int*& A
)。 这通常比返回变量更不受欢迎; 过去,以这种方式返回例如状态码是很常见的。
更新一个全局变量(通常是static
变量)
调用处理结果的 function。 这可能只是更新全局,或做其他事情。 处理 function 在您的 function 中是已知的,或者作为模板传递给它(或在某些情况下,function 指针/ std::function<>
)参数。 模板参数的好处是您不需要提前知道类型(例如int
或long
)。 以这种方式实现工厂很常见。 当它是 function 中的最后一次调用时,它被称为继续传递。
更新环境(例如文件或其他外部)。 这在可能有多个代码实例一起工作的大型系统中特别有用,但也比其他方法慢几个数量级(对于您的实际线程)。
请注意,变量不会因为它们是动态分配的而全局可见。 您仍然需要选择一种方法让它们对调用者(或您将使用它们的代码的其他部分)可见。
new int[*n]
创建新的全局(某种意义上)未命名数组,并返回指向其开头的指针。 该指针是访问该数组的唯一方法。 但是您存储它的变量A
是leesgetallen
的本地变量,因此只能从所述 function 访问。 为了克服这个问题,例如,您可以在main
中定义A
和n
,并将对这些变量的引用(或指针)传递给leesgetallen
。 (或者,正如@lorro 所建议的那样,在一个元组中返回它们的值)
另请注意, n
不需要动态分配,因为您肯定知道它对于您的整个程序来说恰好是一个int
。
谢谢大家,我找到了解决方案。 并且更多地了解动态分配和 memory 管理。
这是供将来参考的解决方案。
int gem(int a[], int n) {
int som = 0;
for (int *pa = a; pa != a + n; pa++) {
som += *pa;
}
int gemiddelde = som / n;
cout << "Het gemiddelde van deze array is: " << gemiddelde << endl;
return gemiddelde;
}
void leesgetallen(int *n, int *A) {
cout << " Wat is de lengte van de Array?" << endl;
cin >> *n;
int cn = *n;
cout << "controle: n = " << *n << endl;
int g = 0;
cout << "Geef de getallen van de Array in stijgende volgorde." << endl;
for (int i = 0; i != cn; i++) {
cout << "Geef getal nummer " << i + 1 << " :";
cin >> g;
A[i] = g;
}
cout << "Ter controle, dit is de ingegeven Array: " << endl;
for (int *pa = A; pa != A + *n; pa++) {
cout << *pa << " ";
}
cout << endl;
}
int main() {
int n = 0;
int *A = new int[n];
leesgetallen(&n, A);
gem(A, n);
delete[] A;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.