從別人那復(fù)制來的,寫的挺詳細(xì)的,希望比你有幫助,不明白的可以M我
站在用戶的角度思考問題,與客戶深入溝通,找到城北網(wǎng)站設(shè)計(jì)與城北網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋城北地區(qū)。
——————————————————————————
形式參數(shù)和實(shí)際參數(shù)
函數(shù)的參數(shù)分為形參和實(shí)參兩種。在本小節(jié)中,進(jìn)一步介紹形參、實(shí)參的特點(diǎn)和兩者的關(guān)系。形參出現(xiàn)在函數(shù)定義中,在整個(gè)函數(shù)體內(nèi)都可以使用,離開該函數(shù)則不能使用。實(shí)參出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實(shí)參變量也不能使用。形參和實(shí)參的功能是作數(shù)據(jù)傳送。發(fā)生函數(shù)調(diào)用時(shí),主調(diào)函數(shù)把實(shí)參的值傳送給被調(diào)函數(shù)的形參從而實(shí)現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。
函數(shù)的形參和實(shí)參具有以下特點(diǎn):
1. 形參變量只有在被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。
2. 實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等,無論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值,輸入等辦法使實(shí)參獲得確定值。
3. 實(shí)參和形參在數(shù)量上,類型上,順序上應(yīng)嚴(yán)格一致,否則會(huì)發(fā)生類型不匹配”的錯(cuò)誤。
4. 函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。即只能把實(shí)參的值傳送給形參,而不能把形參的值反向地傳送給實(shí)參。 因此在函數(shù)調(diào)用過程中,形參的值發(fā)生改變,而實(shí)參中的值不會(huì)變化。
【例】可以說明這個(gè)問題。
main()
{
int n;
printf("input number\n");
scanf("%d",n);
s(n);
printf("n=%d\n",n);
}
int s(int n)
{
int i;
for(i=n-1;i=1;i--)
n=n+i;
printf("n=%d\n",n);
}
本程序中定義了一個(gè)函數(shù)s,該函數(shù)的功能是求∑ni的值。在主函數(shù)中輸入n值,并作為實(shí)參,在調(diào)用時(shí)傳送給s 函數(shù)的形參量n( 注意,本例的形參變量和實(shí)參變量的標(biāo)識(shí)符都為n,但這是兩個(gè)不同的量,各自的作用域不同)。在主函數(shù)中用printf 語句輸出一次n值,這個(gè)n值是實(shí)參n的值。在函數(shù)s中也用printf 語句輸出了一次n值,這個(gè)n值是形參最后取得的n值0。從運(yùn)行情況看,輸入n值為100。即實(shí)參n的值為100。把此值傳給函數(shù)s時(shí),形參n的初值也為100,在執(zhí)行函數(shù)過程中,形參n的值變?yōu)?050。返回主函數(shù)之后,輸出實(shí)參n的值仍為100??梢妼?shí)參的值不隨形參的變化而變化。
#include stdio.h
void fun(int * a,int k);
void main()
{
int a[10];
printf("請(qǐng)輸入10個(gè)整數(shù):\n");
for(int i=0;i10;i++)
{
scanf("%d",a[i]);
}
fun(a,sizeof(a)/sizeof(a[0]));
}
void fun(int a[],int k)//這就是你想要的函數(shù)
{
int g0=0,t0=0,e0=0;/*g0就是0,t0就是小于0,e0就等0*/
for(int i=0;ik;i++)
{
if(a[i]0) g0++;
if(a[i]==0) e0++;
if(a[i]0) t0++;
}
printf("大于0的個(gè)數(shù)為:%d\n",g0);
printf("小于0的個(gè)數(shù)為:%d\n",t0);
printf("等于0的個(gè)數(shù)為:%d\n",e0);
}
/*
說明就和ichenq的差不多,只是ichenq的那個(gè)有問題,比如他的if語句里多了幾個(gè)";"號(hào),導(dǎo)致無沒通過,另外我用他的函數(shù)來測(cè)試得不到想要的結(jié)果
sizeof(a)/sizeof(a[0])就是數(shù)組a的長(zhǎng)度*/
函數(shù)調(diào)用可以作為一個(gè)函數(shù)的實(shí)參,但是不能作為一個(gè)函數(shù)的形參,因?yàn)榉祷刂凳莾?chǔ)存在寄存器中的,而在C語言中寄存器是8位的,8位寄存器只能儲(chǔ)存數(shù)據(jù)而不能儲(chǔ)存地址,沒有地址自然不能作為形參了
給個(gè)程序自己參考,下面程序運(yùn)行時(shí)你輸入一個(gè)文件名, 它會(huì)打開此文件,并寫入0-99個(gè)數(shù)字。
#include stdio.h
void foo(const char *filename)
{
int i;
FILE *fp = fopen(filename, "w+");
for (i = 0; i 100; i++)
fprintf(fp,"%d ", i);
fclose(fp);
}
void main()
{
char str[128];
scanf("%s", str);
foo(str);
}