数组作为子函数形参的时候,是被当做指针处理的,也就是说
环翠网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站开发等网站项目制作,到程序开发,运营维护。创新互联自2013年起到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
你这样写一个子函数
int a(int a[]) ;
等价于
int a(int *a) (其实编译器是这么处理的)你可以看汇编代码!
没有这样的库函数,都比较简单的,自己写个好了如果是字符串数组,strchramp;lt;string.hamp;gt;可以查找某个字符是否在这个字符串数组中
方法
有2
将该数组定义为全局变量,即:
int
g_arr;
void
fun()
{...}
void
main()
{...}
2.将该数组作为函数参数传递到自定义函数里,即:
void
fun(int
arr[])
{...}
void
main()
{
int
arr[10];
fun(arr);
}
//代码1
//要输入多少个数据:6
//1 2 3 4 5 6 (连续输入6个数据)
//1 4 9 16 25 36 (结果)
#includestdio.h
#includestdlib.h //用于调用函数malloc()
void pr(int p[],int j);
int main()
{
int i,j;
int *a; //指向动态内存
printf("要输入多少个数据:");
scanf("%d",j);
//创建动态内存
a=(int *)malloc(j * sizeof(int));
if(a == NULL)
{
printf("\n分配动态内存时出错.\n");
exit(1);
}
for(i=0;ij;i++)
{
scanf("%d",a[i]);
}
pr(a,j);
//原代码for(int i=0;ij;i++)
for(i=0;ij;i++)
{
//原代码printf("%5d\n",a[i]);
printf("%d ",a[i]);
}
return 0;
}
void pr(int p[],int j)
{
int i;
for(i=0 ; ij ; i++)
{
p[i]=p[i]*p[i];
}
}
//
//代码2
#includestdio.h
#includestdlib.h //用于调用函数malloc()
void pr(int p[],int j);
int main()
{
int buf[]={1,2,3,4,5,6};
int i,j;
int *a; //指向动态内存
//计算数组buf的大小
j=sizeof(buf)/sizeof(int);
//创建动态内存
a=(int *)malloc(j * sizeof(int));
if(a == NULL)
{
printf("\n分配动态内存时出错.\n");
exit(1);
}
for(i=0;ij;i++)
{
a[i]=buf[i];
}
pr(a,j);
printf("原数组里的数据: ");
for(i=0;ij;i++)
{
printf("%d ",buf[i]);
}
printf("\n");
printf("运算后的数据: ");
for(i=0;ij;i++)
{
printf("%d ",a[i]);
}
return 0;
}
void pr(int p[],int j)
{
int i;
for(i=0 ; ij ; i++)
{
p[i]=p[i]*p[i];
}
}
//
来传送子函数中的数组有多种方法——可以通过函数返回值返回地址传递数组;也可以通过函数输入参数来传递数组;还可以通过全局变量来传递数组。
子函数本身可以直接在作用域中进行调用。
1、通过函数返回值返回地址传递数组。
声明函数时需要声明函数返回值类型为对应数组的地址,此时可以返回数组的地址,结合数组元素的地址关系可以传递整个数组,同时可以根据数组的特性传递多个参数。
2、通过输入参数传递数组。
声明函数时提供空输入参数,调用函数时提供目标数组,即可以通过该数组调用子函数中的数组,该方法也可以用于传递多个参数。
3、通过全局变量来传递数组。
声明全局变量用于存储子函数中的数组,此时可以在全局变量作用域中读取调用子函数的数组。
注意:子函数是C语言模块化编程思想的核心,其方法是通过输入接口和输出接口实现对黑盒的调用,故对其内部数据的输入和调用也需要通过输入接口、输出接口和程序的公共区域实现。
在C语言中,无法直接返回一个数组,但是可以通过返回对应类型指针的方式,返回数组。
在大多数情况下,一维数组和一维指针是可以通用的。
比如,定义一个函数,申请一定长度的整型动态数组,其长度用参数传入,并将结果返回。如出错,返回空指针NULL。 代码可以写成如下形式:
int *int_array_create(int n)//参数n为数组元素个数
{
int *r;
if(n=0) return NULL;//参数错误
r = (int *)malloc(sizeof(int)*n);//申请内存空间,大小为n个int长度。
return r;//返回得到的整型数组的指针。
}