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,
參考資料
網路-數組