[英]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.