首页 > 试题广场 >

有以下程序,设计功能是调用函数create建立并初始化动态数

[问答题]
有以下程序,设计功能是调用函数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改为指针引用参数。

void create(int *&,int);             //函数原型声明,使用引用参数
void create(int *&ap,int n)          //函数定义
{
ap=new int[n];
for(int i=0;i<n;i++)
ap[i]=i;
}

发表于 2018-05-07 11:42:23 回复(0)