c语言自定义函数数组
‘壹’ c语言初学者求助。。。关于自定义函数和数组
#include<stdio.h>
#defineMAX40
intcount(intscore[],intnum);
intread(intscore[]);
intmain()
{
intscore[MAX],count1,num,n;//变量名不能和函数名重复count变成count1
printf("请输入同学们的成绩,输入-1表示输入结束 ");
num=read(score);
n=num;
printf("一共有学生%d人 ",num);
count1=count(score,n);//修改
printf("高于平均分的学生有%d人 ",count1);//修改
return0;
}
intread(intscore[])
{
inti,n=0;
for(i=0;i<40;i++)
{
scanf("%d",&score[i]);
if(score[i]<0)
break;
else
n=n+1;
}
returnn;
}
intcount(intscore[],intnum)
{
inti,count1=0;////变量名不能和函数名重复count变成count1
floatave=0;
for(i=0;i<num;i++)
{
//if(score[i]>0)没有必要检查了
ave=ave+score[i];
/*
else
break;
*/
}
ave=ave/num;
for(i=0;i<num;i++)
{
if(score[i]>ave)
count1=count1+1;//修改
}
returncount1;//修改
}
‘贰’ c语言中能不能定义函数数组
函数不可以定义为数组,可以用函数指针来操作。
1.函数指针的数组定义方法:返回值类型( * 指针变量名[Number]) (形参列表)。
例如:
double add(double a,double b){}
double sub(double a,double b){}
double mul(double a,double b){}
double div1(double a,double b){}
double (*oper_func[])(double, double) = {add,sub,mul,div1};//函数指针的数组定义。
2.函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数。
(2)c语言自定义函数数组扩展阅读:
指针函数和函数指针的区别:
这两个概念都是简称,指针函数是指返回值是指针的函数,即本质是一个函数。我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。其定义格式如下所示:返回类型标识符*函数名称。
返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。
参考资料:网络 -函数指针
‘叁’ C语言怎么向自定义函数中传入一个数组,处理完再返回新的数组
看你的代码。
你问题并不在数组传入。你函数mymd5接收password数组,mymd5的password数组变量和外部函数的password地址相同,所以改变其中外部函数的数组也改变。
但你mymd5返回的数组decrypt,是局部变量,当mymd5调用结束,这个数组的内存空间就释放了。你接收了也是NULL。所以要用malloc或calloc申请动态内存。这样不会被释放。
我写了简单案例,你参考:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
char*md(chara[]);//错误的数组返回
char*md2(chara[]);//正确的数组返回
intmain()
{
charpassword[10]="123456789",*decrypt=NULL;
decrypt=md(password);
printf("外部函数传递数组到子函数,子函数改变,外部函数也改变,password=%s
",password);
printf("错误返回方式:局部变量,外部函数接收失败,被自动释放,decrypt=%s
",decrypt);
decrypt=md2(password);
printf("正确返回方式:动态申请,外部函数接收成功,不会被自动释放,decrypt=%s
",decrypt);
return0;
}
char*md(charpassword[])
{
chardecrypt[10]="*********";
password[0]=0,strcpy(password,"abcdefghi");
returndecrypt;
}
char*md2(charpassword[])
{
char*decrypt=(char*)malloc(sizeof(char)*10);
if(!decrypt)
returnNULL;
strcpy(decrypt,"*********");
password[0]=0,strcpy(password,"abcdefghi");
returndecrypt;
}
‘肆’ C语言定义一个函数如果含有数组
void min(int a[],int x) //int x是用来标记传过来的数组的长度(即a数组指向的那个数组的长度)。
因为你在函数中计算的时候,a只能当做一个指针来用,没有具体的长度,而且你是int 型的,所以没有标准库函数来求你需要计算的数组的长度,所以你就没法计算。
void min(int a[],int b[])这样计算没错误,但是在计算的时候,你要知道a所指向的数组的长度和b所指向的长度,例如下面的例子:
a数组中有10个数,b数组中有2个数,a数组的大小是40个字节,而指向他的c数组大小只有4个字节,所以当你运算的时候,你要知道c指向的a数组的大小,同理,d也是一样。
#include"stdio.h"
#include"string.h"
void min(int c[],int d[])
{
int i,j=0;
int e[100]={0};
printf("c=%d
",sizeof(c));
for(i=0;i<10;i++)//a数组中有10个数
e[j++]=c[i];
for(i=0;i<2;i++)//b数组中有2个数
e[j++]=d[i];
for(i=0;e[i];i++)
printf("%d ",e[i]);
}
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b[2]={3,4};
printf("a=%d
",sizeof(a));
min(a,b);
}
‘伍’ C语言中如何定义数组
数组定义的三种方式
1、第一种
int []a = newint[5];
a[0] = 10;
2、第二种
int []c = newint[]{1,2,3};
3、第三种
int []i ={1,2,3,4};
4、错误的写法
int []i1 = [1,2,3,4];
System.out.println(Arrays.toString(c));
5、总之,具体的元素不能被【】包裹。【】包裹的应该是数组的数量。
(5)c语言自定义函数数组扩展阅读
数组的注意事项:
1、 数组中每个元素的数据类型必须相同,对于inta[4];,每个元素都必须为 int。
2、 数组长度 length最好是整数或者常量表达式,
3、 访问数组元素时,下标的取值范围为 0 ≤ index < length,
参考资料
网络-数组