c语言函数返回数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言函数返回数组相关的知识,希望对你有一定的参考价值。
#include<stdio.h>
int main()
float student_aver(float array[3][3]);
float score[3][3];
int i,j;
printf("请输入学生各科的成绩:");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%f",&score[i][j]);
printf("每个学生的平均成绩分别为:");
for(i=0;i<3;i++)
printf("%.2f ",student_aver(score));
return 0;
float student_aver(float array[3][3])
int i,j;
float sum,a[3];
for(i=0;i<3;i++)
sum=0;
for(j=0;j<3;j++)
sum=sum+array[i][j];
a[i]=sum/3;
return a[0];
将每个学生的平均分用函数求出,怎么返回
你好!
将函数采用指针的形式返回平均值
注意看后面的注释
int main()
float *student_aver(float array[3][3]); // 改成指针的形式输出
float score[3][3];
float *a;
int i,j;
printf("请输入学生各科的成绩:");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%f",&score[i][j]);
printf("每个学生的平均成绩分别为:");
a=student_aver(score); // 指针 a 接收函数的返回值
for(i=0;i<3;i++) // 打印出平均值
printf("%.2f ",a[i]);
return 0;
float *student_aver(float array[3][3]) // 改成指针的形式输出
int i,j;
float sum,a[3];
for(i=0;i<3;i++)
sum=0;
for(j=0;j<3;j++)
sum=sum+array[i][j];
a[i]=sum/3;
return a; // 输出数组 a
参考技术A
方法有不少,这里给出两种:
把需要返回结果的数组作为一个参数传入,函数在运算过程中填写这个数组的各个项的值,函数执行完后这个数组中的内容就是需要的内容了,这是第一种做法。
把需要返回的数组malloc出来,返回后再试用完成后再free
第一种
#include<stdio.h>int main()
void student_aver(float score[3][3], float averge[3]);
float score[3][3];
float average[3];
int i,j;
printf("请输入学生各科的成绩:");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%f",&score[i][j]);
printf("每个学生的平均成绩分别为:");
student_aver(score, average);
for(i=0;i<3;i++)
printf("%.2f ",average[i]);
return 0;
void student_aver(float score[3][3], float average[3])
int i,j;
float sum;
for(i=0;i<3;i++)
sum=0;
for(j=0;j<3;j++)
sum=sum+score[i][j];
average[i]=sum/3;
第二种:
#include<stdio.h>#include<stdlib.h>
int main()
float* student_aver(float score[3][3]);
float score[3][3];
float *average;
int i,j;
printf("请输入学生各科的成绩:");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%f",&score[i][j]);
printf("每个学生的平均成绩分别为:");
average = student_aver(score);
for(i=0;i<3;i++)
printf("%.2f ",average[i]);
free(average);
return 0;
float* student_aver(float score[3][3])
float *average = (float*)malloc(sizeof(float) * 3);
int i,j;
float sum;
for(i=0;i<3;i++)
sum=0;
for(j=0;j<3;j++)
sum=sum+score[i][j];
average[i]=sum/3;
return average;
参考技术B
函数是无法返回数组的,只能返回指针,但返回指针的弊端是指针指向的内存不能是函数的局部变量的。所以还得用传出参数,有两个办法,一是直接用一个array就搞定,另它的每一行的最后一列是计算出来的平均值;另一个方法就是再传入进去一个指针,返回平均数。第一种可以不修改当前接口直接改,但如果无所谓还是第二种比较好,代码如下:
void student_aver(float array[3][3], float average[3])int i, j;
float sum;
for (i = 0; i < 3; i++)
sum = 0;
for(j=0;j<3;j++)
sum=sum+array[i][j];
average[i] = sum/3;
参考技术C #include<stdio.h>
#include<stdlib.h>
#include<string.h>
float* student_aver(float array[3][3], int n)
int i,j;
float sum;
float *a = (float*)malloc(n*sizeof(float));
if(a == NULL)
return NULL;
memset(a,0,sizeof(float)*n);
for(i=0;i<n;i++)
sum=0;
for(j=0;j<n;j++)
sum=sum+array[i][j];
a[i]=sum/3;
return a;
int main(void)
float score[3][3];
int i,j;
printf("请输入学生各科的成绩:");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%f",&score[i][j]);
printf("每个学生的平均成绩分别为:");
for(i=0;i<3;i++)
printf("%.2f\t ",student_aver(score,3)[i]);
printf("\n");
return 0;
你好 代码修改如下,你看一下,有不懂得继续问。
C语言中有没有返回数组类型的函数?
看来你是还没有理解数组的概念,数组名实际上就是指向该数组第一个元素的指针,比如说:int
array[3]=1,2,3的一个数组,这里的array实际上是一个指针,指向了这个数组的第一个元素。这时候你的*array
=
1,*(array
+
1)
=2,*(array
+
2)
=
3。
这时候你应该知道,所谓的返回数组和返回指针实际上是一个概念。
int
*
retInt()
int
array[3]=1,2,3;
return
array;
实际上就是返回了一个数组。你的最后一个问题,指定数组类型,实际上只要指定指针类型就可以了。
还有一种方法就是楼上的兄弟说的了,定义一个新的数据类型存放数组,函数返回该数据类型也就相当于返回了一个数组。
(上面的函数中数组有作用域问题,仅做说明使用。) 参考技术A memcpy(ave,
average(score,p,q),
sizeof(ave));
要显式的把返回的数组数据拷贝到另一个数组中。
另外,你average函数中的aver是局部变量,你怎么能把它返回呢?这块内存在返回前就失效了。 参考技术B 没有。
以上是关于c语言函数返回数组的主要内容,如果未能解决你的问题,请参考以下文章