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


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】

你可以返回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数组都是指向的同一个数组。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-07

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

// line 23
int *retArr = f1 (input, 12, 3); // 定义一个新指针retArr指向f1中定义的s数组的首位

相似回答