有以下程序,设计功能是调用函数create建立并初始化动态数组,令a[i]=i。但该程序运行后不能得到期望结果,请分析程序的错误原因并进行修改。
#include <iostream> using namespace std; void create(int *, int); int main() { int *a = NULL, len; cin>>len; create(a,len); for( int i = 0; i<len; i++ ) cout << a[i] << " "; cout << endl; delete []a; a = NULL; } void create(int *ap, int n) { ap=new int[n]; for(int i=0; i<n; i++) ap[i]=i; }
函数create中,指针参数int*ap是传地址值的参数。调用函数时接受实际参数a的值(地址值)作为初始值。ap仅是局部变量,ap=new int[n]获得新的地址值,函数执行完毕返回,ap被释放,完全与实际参数a无关。程序没有编译错误,但main不能获得动态数组。修改方法是把ap改为指针引用参数。