#include<stdio.h>
#define size 6
void main(void)
{
int a[size]={1,1,1,1,1,1};
int *fun(int *,int);
for(int i=0;i<size;++i)
{
printf("%d\n",*(fun(a,size)+i));
}
}
int *fun(int *a,int n)
{
for(int i=0;i<n;++i)
{
*(a+i)+=5;
}
return(a);
}
结果为:
6 11 16 21 26 31
由于
for(int i=0;i<size;++i)
{
printf("%d\n",*(fun(a,size)+i));
}
调用6次*fun(),所以造成这样的结果。而改成:
int *p;
p=*fun(a,size);
for(int i=0;i<size;++i)
{
printf("%d\n",*(p+i));
}
编译时提示出错。
请问:
1、主函数中该怎么做,才不至于多次用*fun(),但又能输出数组各个元素的值?
2、改int *p; p=*fun(a,size);编译为什么通不过(我的编译器为vc++ 6.0)如果
要改,该怎么做?
数组可以通过指针传递到函数中. 因为指针保存的是内存地址.所以数组就不需要再从函数返回了.
#include<stdio.h>
#define size 6
void main(void)
{
int a[size]={1,1,1,1,1,1};
void fun(int *,int);
fun(a,size);
for(int i=0;i<size;++i)
{
printf("%d\n",a[i]+i);
}
}
void fun(int *a,int n)
{
for(int i=0;i<n;++i)
{
*(a+i)+=5;
}
}
这样输出是6 7 8 9 10 11
上面就是不需要多次调用fun函数的方法.
关于int *p; p=*fun(a,size);为什么错误. 因为p=*fun(a,size);.改成p=fun(a,size);就没问题了.
指针当然得用指针赋值, 你对数组返回的值解引用后赋值给指针.这是错误的
********************************************************************************************************************
另外关于补充的第二个问题.p=fun(a,size);我在VC6中测试没有问题.
你可以把代码发上来看看.
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息