C语言中怎样定义一个函数里面有数组然后在主函数中调用这个数组

如voidf1(inta[],intn,intk){ints[8],i,j=0;for(i=0;i<n;i++){if(a[i]!=k){s[j]=a[i];j++;}}...
void f1(int a[], int n, int k)
{
int s[8], i, j=0;
for (i=0; i<n; i++)
{
if (a[i]!=k)
{
s[j] = a[i];
j++;
}
}
}
要如何在主函数中应用s【i】
展开
 我来答
cdinten
推荐于2017-12-07 · TA获得超过6588个赞
知道大有可为答主
回答量:3562
采纳率:56%
帮助的人:1298万
展开全部
你可以返回s数组的首地址,函数可以这么定义:
int* f1(int a[], int n, int k)

{
....//你的代码
return s;
}
追问
然后这样就可以在主函数中引用s【1】  是s【2】了是吗
追答

抱歉刚才没有仔细看你的代码,现在分析了一下,给你回复。

在你的函数中数组是局部变量,用完之后会被回收,因此刚才说直接返回不太恰当,而是要用动态内存分配的方式返回,给你看看代码:

#include <stdio.h>
#include <stdlib.h>

//这个函数相当于是将数组a中不为k的值挑出来
int* f1(int a[], int n, int k)
{
int* s=(int*)malloc(9*sizeof(int));
int i, j=0;
printf("In 'f1',Address of s is %d\n",s);
for (i=0; i<n; i++)
    {
        if (a[i]!=k)
        {
            s[j] = a[i];
            j++;
        }
    }
    return s;
}
int main()
{
    int i,input[12]={1,2,3,4,5,6,3,1,2,3,3,9};
    int* retArr=f1(input,12,3);//将不是3的数挑出来放到retArr指向的地址中
    printf("In 'main',Address of retArr is %d\n",retArr);
    for(i=0;i<8;i++)
    {
        printf("%d ",retArr[i]);
    }
    printf("\n");
    free(retArr);
    return 0;
}

运行效果如下:

这个函数中s是动态分配的,因此在main中用完之后要记得释放。从程序设计的角度来说,这种方式是十分不提倡的。因为你在一个函数中分配的内存,最好是在该函数中释放。

更简单的方法是,你将数组s定义为全局变量,这样在代码的任何位置,s数组都是指向的同一个数组。

我要考第一319
2017-12-07 · TA获得超过1168个赞
知道小有建树答主
回答量:278
采纳率:0%
帮助的人:79.6万
展开全部

23行的注释有误,容易引起误解,修正如下:

// line 23
int *retArr = f1 (input, 12, 3); // 定义一个新指针retArr指向f1中定义的s数组的首位
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式