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】 展开
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;
}
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数组都是指向的同一个数组。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询