注册 登录
编程论坛 C++教室

这代码为什么错了啊

草狼 发布于 2010-07-16 23:24, 770 次点击
#include<iostream>
using namespace std;
void APP(int *pa,int n);
int main()
{
    int *ary=NULL,*t;
    int i,n;
    cout<<"n=";
    cin>>n;
    APP(ary,n);
    for(t=ary;t<ary+n;t++)
        cout<<*t<<"  ";
    cout<<endl;
    for(i=0;i<n;i++) ary[i]=10+i;
    for(i=0;i<n;i++)  cout<<ary[i]<<" ";
    cout<<endl;
    delete []ary;
    ary=NULL;
}

void APP(int *pa,int len)
{
    pa=new int[len];
    if(pa==NULL)
    {
     cout<<"allocation faiure\n";
     return;
    }
    for(int i=0;i<len;i++) pa[i]=0;
}
8 回复
#2
最近不在2010-07-16 23:46
程序代码:
// Note:Your choice is C++ IDE
#include <iostream>
using namespace std;

void GetMem(char **p, int n)   //第一个参数为指针的指针(地址),第二个参数为分配内存大小
{
    *p = new char[n];
}

int main()
{
    char *a = "abcdef";
    int n = strlen(a);
    char *p = 0;
  
    GetMem(&p, (n+1));   //动态内存的意义在于动态分配够用的空间。这样才能体现动态分配的意义。
    strcpy(p, a);   //拷贝字符串
    cout<<p<<endl;
  
    delete [] p;  //记得回收内存...
   
    return 0;
}
#3
lintaoyn2010-07-17 06:43
void APP(int * &pa,int len)//pa改成一个引用,它引用一个指向int的指针。这样子较为好懂,不用整个二级指针和对指针取地址。其他的看二楼说的
#4
草狼2010-07-17 14:21
回复 2楼 最近不在
在问下哦,定义动态整型 int *p=new int;不能用cin>>p;来输入,那应该如何来输入p的值呢?
#5
flyingcat2010-07-18 01:19
#include <iostream>
using namespace std;

int main()
{
    int *p=new int;
    scanf("%d",p);
    printf("%d\n",*p);
    return 0;
}
#6
vfdff2010-07-18 01:28
以下是引用草狼在2010-7-17 14:21:35的发言:

在问下哦,定义动态整型 int *p=new int;不能用cin>>p;来输入,那应该如何来输入p的值呢?
cin>>p 语法是没有问题的,只是指针不宜随便乱指到一个位置的地址
#7
ak4765652010-07-18 20:41
int *p=new int;
cin>>*p;
能通过。
#8
qianzezi_pku2010-07-22 22:56
会错的原因是 void APP(int *pa,int len) 第一个参数int *pa 不是二级指针,外部不能正确得到该函数申请的空间。
所以建议使用二级指针,或者使用函数的返回形式就行了。
我改了一下代码如下:
我使用的是 函数的返回形式
#include<iostream>
using namespace std;
int * APP(int len);

int main()
{
    int *ary=NULL,*t;
    int i,n;
    cout<<"n=";
    cin>>n;
    ary=APP(n);
    for(t=ary;t<ary+n;t++)
        cout<<*t<<"  ";
    cout<<endl;
    for(i=0;i<n;i++)
        ary[i]=10+i;
    for(i=0;i<n;i++)
        cout<<ary[i]<<" ";
    cout<<endl;
    delete []ary;
    ary=NULL;
    return 0;
}

int * APP(int len)
{
    int *pa=new int[len];
    if(pa==NULL)
    {
        cout<<"allocation faiure\n";
        return NULL;
    }
    for(int i=0;i<len;i++)
        pa[i]=0;
    return pa;
}
#9
tianxiao1102010-07-24 17:09
你在这个地方出了:在实参向形参传递的时候,估计你以为这是指针也就是地址传递,但其实这是指针之间的值传递,形参pa再怎么变,实参ary都不会有反应;这样稍作修改就ok啦


#include<iostream>
using namespace std;
int* APP(int *pa,int len);
int main()
{
    int *ary=NULL,*t;
    int i,n;
    cout<<"n=";
    cin>>n;
    ary=APP(ary,n);
    for(t=ary;t<ary+n;t++)
        cout<<*t<<"  ";
    cout<<endl;
    for(i=0;i<n;i++) ary[i]=10+i;
    for(i=0;i<n;i++)  cout<<ary[i]<<" ";
    cout<<endl;
    delete []ary;
    ary=NULL;
}

int* APP(int *pa,int len)
{
    pa=new int[len];
    if(pa==NULL)
    {
     cout<<"allocation faiure\n";

    }
    for(int i=0;i<len;i++) pa[i]=0;
    return(pa);
}
1