我试图写一个程序,从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