我試圖寫一個程序,從CIN使用指針讀取的值,然後輸出該值沿着他們的陣列中的位置。我無法弄清楚爲什麼printNumbers1有效,但printNumbers2不能。下面是程序(接近底部的相關代碼):C++指針/ for循環混亂
#include <iostream>
using namespace std;
int *readNumbers(int);
void printNumbers1(int*);
void printNumbers2(int*);
int main()
{
int *numbers = readNumbers(5);
printNumbers1(numbers);
printNumbers2(numbers);
return 0;
}
int *readNumbers(int n)
{
int a[n];
int *numbers;
numbers = &a[0];
for (int i=0; i<n; i++)
{
cin >> *(numbers+i);
}
return numbers;
}
void printNumbers1(int *numbers)
{
cout << 0 << ' ' << *(numbers) << endl
<< 1 << ' ' << *(numbers+1) << endl
<< 2 << ' ' << *(numbers+2) << endl
<< 3 << ' ' << *(numbers+3) << endl
<< 4 << ' ' << *(numbers+4) << endl;
}
void printNumbers2(int *numbers)
{
for (int i=0; i<5; i++)
{
cout << i << ' ' << *(numbers+i) << endl;
}
}
當我運行程序,它可以作爲用於printNumbers1但輸出看似隨機數和0的printNumbers2的組合。我覺得這兩個printNumbers函數應該具有相同的功能,但它們不會。我錯過了什麼?
'a'是一個局部變量。它將超出範圍並在函數結束時變爲無效。返回一個指向它的指針是一個壞主意,因爲指針將指向壞內存。你很可能不得不使用'new'和'delete'。 – user4581301