這幾天呢,寫了點帶有數組的自定義函數。數組
發現有幾個須要注意的地方。即參數問題。函數
先解釋一下,參數易班分兩類:形參,實參。學習
實參(argument):
全稱爲"實際參數"是在調用時傳遞給函數的參數. 實參能夠是常量、變量、表達式、函數等, 不管實參是何種類型的量,在進行函數調用時,它們都必須具備肯定的值, 以便把這些值傳送給形參。 所以應預先用賦值,輸入等辦法使實參得到肯定值。
形參(parameter):
全稱爲"形式參數" 因爲它不是實際存在變量,因此又稱虛擬變量。是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳入的參數.在調用函數時,實參將賦值給形參。於是,必須注意實參的個數,類型應與形參一一對應,而且實參必需要有肯定的值。
形式參數:形參是函數被調用時用於接收實參值的變量。.net
根據實際須要無關緊要。沒有形參時,圓括號也不可省;多個參數之間應用逗號分隔。參數包括參數名和參數類型。blog
(轉載自:https://blog.csdn.net/qq_33187168/article/details/50346465)(裏面有詳細的分析與解釋。懂的就不用去看了。)編譯器
如今進去正題:注意事項。數組參數的引入,即在對函數調用是講數組引入時的格式問題。io
這裏、以本身編寫的一個在一個固定長度的數組中尋找最大值的簡單函數爲例解釋。編譯
先看函數體:變量
int max(int q[], int x)
{
int a;
int max = q[0];
for (a = 1; a < x; a++)
{
if (q[a] > max)
max = q[a];
}
return max;
}
能夠看到,我在編輯形參時沒有寫入數組的長度
能夠這樣想:咱們要引入數組,與此同時數組的名字是未知的,數組的長度也是未知的。即這裏的數組形參會涉及兩個變量
1:數組的名字,這裏是int型全部寫了:int q[]
2:數組的長度由於長度是整形,因此用int x
如今看函數調用的例句:
s = max(q, 3);
能夠看到這裏調用時引入了兩個變量:q(程序前面定義的數組名),3(數組長度)
即會把前面的q當作max函數中的數組名,3當作x即數組長度進行運算。
這裏要注意的就是引入是要按函數頭上本身定義是的順序一一對應。
不然會沒法編譯。
如今看完整代碼。
說到完整代碼又要多說點東西了。
函數體的位置安放
先看第一種:
#include<stdio.h>
int max(int q[], int x)
{
int a;
int max = q[0];
for (a = 1; a < x; a++)
{
if (q[a] > max)
max = q[a];
}
return max;
}
int main()
{
int q[3];
int s;
for (s = 0; s < 3; s++)
{
scanf("%d", &q[s]);
}
s = max(q, 3);
printf("%d\n", s);
return 0;
}
函數體在int main()上面。
即你在使用該函數以前就要先進行定義
即先定義,後使用。
不然會報錯,固然有的編譯器在你放後面時不會報錯,會給你一個warning,但也會影響代碼的可讀性。
不過該有一種方法能夠不用吧函數體放在最前面:
先進性聲明:即先告訴電腦我在後面定義了一個程序,一面計算機誤解致使編譯出錯。
#include<stdio.h>
int max(int q[], int x);//函數聲明
int main()
{
int q[3];
int s;
for (s = 0; s < 3; s++)
{
scanf("%d", &q[s]);
}
s = max(q, 3);
printf("%d\n", s);
return 0;
}
int max(int q[], int x)
{
int a;
int max = q[0];
for (a = 1; a < x; a++)
{
if (q[a] > max)
max = q[a];
}
return max;
}
可見:在前面先進性聲明爲另外一種格式。
此爲編譯及試運行結果
OK因爲本人才疏學淺,此次就寫到這裏,
後期會繼續學習,持續更新。
謝謝