扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
来传送子函数中的数组有多种方法——可以通过函数返回值返回地址传递数组;也可以通过函数输入参数来传递数组;还可以通过全局变量来传递数组。
创新互联技术团队十多年来致力于为客户提供成都做网站、成都网站设计、品牌网站建设、成都全网营销、搜索引擎SEO优化等服务。经过多年发展,公司拥有经验丰富的技术团队,先后服务、推广了成百上千家网站,包括各类中小企业、企事单位、高校等机构单位。
子函数本身可以直接在作用域中进行调用。
1、通过函数返回值返回地址传递数组。
声明函数时需要声明函数返回值类型为对应数组的地址,此时可以返回数组的地址,结合数组元素的地址关系可以传递整个数组,同时可以根据数组的特性传递多个参数。
2、通过输入参数传递数组。
声明函数时提供空输入参数,调用函数时提供目标数组,即可以通过该数组调用子函数中的数组,该方法也可以用于传递多个参数。
3、通过全局变量来传递数组。
声明全局变量用于存储子函数中的数组,此时可以在全局变量作用域中读取调用子函数的数组。
注意:子函数是C语言模块化编程思想的核心,其方法是通过输入接口和输出接口实现对黑盒的调用,故对其内部数据的输入和调用也需要通过输入接口、输出接口和程序的公共区域实现。
你的代码不全,我只能给你分析一下这种情况常见的错误了。
1、要返回数组定义在子函数中。在函数体内部定义的数据变量,如果未加修饰符(static和extern),那么她是局部的,函数执行完毕之后内存释放,造成你访问错误。你下边的那个例子定义的数组是全局变量,先不说了下班了晚上补充
把数组名作为实参,传递给子函数即可,这是地址传递,子函数中处理的结果将影响到主函数数组的元素值。课本上“数组做函数参数”部分应该有例子可以参考。
首先这样的作法是没有意义的,因为当函数返回之后,函数原始空间中的数组和变量是临时的,都会被自动清除和释放。如果需要通过函数将改变的结果传回,可以使用指针。 void shuru(int* p,int a[]){ *p = 123; int b[10]={1,2,3,4,5,4,6,7}; for (int i=0;i9;i++) a[i]=b[i] } void main(){ int b, a[10] ; shuru(b,a); printf("%d",b); for(int i=0;i10;i++){ printf("%d",a[i]); } }
/*
1 2 7 6 5 4 3 8 9 10
Press any key to continue
*/
#include stdio.h
void sort(int a[],int n) {
int i,j,t,k;
for(i = 0;i n - 1;i++) {
k = i;
for(j = i + 1;j n;j++)
if(a[k] a[j]) k = j;
if(k != i) {
t = a[i];
a[i] = a[k];
a[k] = t;
}
}
}
int main() {
int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(aa + 2,5);
for(i = 0;i 10;i++)
printf("%d ",aa[i]);
printf("\n");
return 0;
}
1:子函数中sum没有初值,应该为 float sum=0;
2:sum/10的结果为浮点型,你定义一个整型的avg1接收会产生错误,应该定义一个浮点型变量接收值
3:你这里是三个学生,你在函数中不应该除以10,另外函数中的循环取得的sum值是一个学生五门功课的成绩总和,如果要求每一门功课的 平均成绩,你的循环需要修改
4:函数的调用是压栈的过程,你的函数没有返回值所以不可以return b[5],如果想要返回一个数组你应该在主函数中先定义然后向自定义函数中传入子函数地址,这样就可以保存每门功课的成绩了
希望可以帮到你
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流