永发信息网

关于返回值为一个数组的问题

答案:1  悬赏:0  手机版
解决时间 2021-04-28 01:37
  • 提问者网友:嗝是迷路的屁
  • 2021-04-27 02:59

#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)如果

要改,该怎么做?

最佳答案
  • 五星知识达人网友:怙棘
  • 2021-04-27 04:00

数组可以通过指针传递到函数中. 因为指针保存的是内存地址.所以数组就不需要再从函数返回了.


#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中测试没有问题.


你可以把代码发上来看看.

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯