【发布时间】:2018-11-26 06:58:45
【问题描述】:
所以我看到了这段代码,我得到了大部分代码,直到它应该分配一个指向数组的指针。目标是分配是必须程序打印出 100 99 98 3 2 1。所以在我看来,函数 f 什么都不做,所以我删除了它。我的问题是如何将指针分配给函数内的数组?我还认为返回数组会起作用,但没有成功。提前致谢
#include <iostream>
using namespace std;
int* nochange(int* p)
{
return p;
}
int* getPtrToArray(int& m)
{
int anArray[100];
for (int j = 0; j < 100; j++)
anArray[j] = 100-j;
m = 100;
return nochange(anArray);
}
void f()
{
int junk[100];
for (int k = 0; k < 100; k++)
junk[k] = 123400000 + k;
junk[50]++;
}
int main()
{
int n;
int* ptr = getPtrToArray(n);
f();
for (int i = 0; i < 3; i++)
cout << ptr[i] << ' ';
for (int i = n-3; i < n; i++)
cout << ptr[i] << ' ';
cout << endl;
}c
【问题讨论】:
-
你已经创建了local int anArray[100];,一旦你从函数返回指针就失效了。
-
“所以我看到了这段代码”——告诉任何提交它的人他们的代码调用了未定义的行为,甚至猜测会发生什么都是疯狂的追求。
anArray是getPtrToArray的本地地址。函数nochange是没有意义的,它返回给定的指针,在这种情况下,指向anArray的第一个元素的指针,一旦getPtrToArray返回,它就会过期。因此,该指针结果毫无价值。对它的任何引用或通过它调用未定义的行为。 -
要注意的事情,1) 局部变量是在堆栈上创建的,如果您希望在函数外部可见,请使用全局或动态为数组分配内存并自行管理或作为建议将其设为静态函数。 2) 指针可以作为参数返回或传回,但前提是您传递指针的地址。
标签: c++ arrays function pointers