读书人

不知道错在哪儿了啊

发布时间: 2013-03-19 17:22:05 作者: rapoo

不知道错在哪里了啊??

#include <stdio.h>
#include <stdlib.h>
int arr1(int n,int *arr)
{
int i=0;
arr=(int*)malloc(n*sizeof(int));
printf("please input the elements\n");
for(i=0;i<n;i++)
{
scanf("%d",arr+i);
}
return ;
}
void main()
{
int *arr,n,i;
printf("please input the num of elements:");
scanf("%d",&n);
arr1(n,arr);
for(i=0;i<n;i++)
printf("%d",arr[i]);
system("pause");
}

[解决办法]
对你的代码改动了两个地方

#include <stdio.h>
#include <stdlib.h>
int *arr1(int n,int *arr) //这里有改动
{
int i=0;
arr=(int*)malloc(n*sizeof(int));
printf("please input the elements\n");
for(i=0;i<n;i++)
{
scanf("%d",arr+i);
}
return arr; //这里即使按照你原来的定义,也应该有个int型返回值
}
int main()
{
int *arr,n,i;
printf("please input the num of elements:");
scanf("%d",&n);
arr=arr1(n,arr); //这里也有改动
for(i=0;i<n;i++)
printf("%d",arr[i]);
system("pause");
return 0;
}

做出这样的改动是因为:
一级指针和二级指针在做形参时的不同:指针用作形参,改变指针地址则值不能传回,改变指针内容而地址不变则值可以传回(特殊情况:改变指针地址采用返回值也可以传回地址);
对于一级指针,做形参时传入地址,如果函数只改变该指针内容,OK,该指针可以正常返回;
如果函数改变了指针地址,除非返回该指针,否则该指针不能正常返回,函数内对指针的操作将无效

读书人网 >C++

热点推荐