博主學習C語言是通過B站上的《郝斌C語言自學教程》,對於C語言初學者來說,我認為郝斌真的是在全網C語言學習課程中講的最全面,到位的一個,這個不是真不是博主我吹他哈,大家可以去B站去看看,C語言這個大標簽下,確實是郝斌老師的點擊量最高,所以說呢,博主的C語言學習筆記都是基於郝斌老師課程上講的知識結合度娘的總結和一些感悟。
首先,函數的格式是: 返回值類型 函數名(形參1,形參2,.....)
{
函數體(代碼 ~ ~)
}
1.函數體就代碼嘛,咱用的main()函數,{ 這里碼的就是函數體 };
2.函數名就是字面意思,在其他函數中調用時,格式就是:函數名(形參/可能沒有);;
3.返回值類型,分為void(空類型,也就是沒有返回值)/有返回值類型(int/char/等等)(所以說void類型函數即使在函數體中敲出了返回值,也是沒有意義的);返回值就是 return (這里就是返回值);
注意返回值數據類型要與你設定的相同,比如你設定類型為int,而你 return X,那么此函數的返回值就是‘X’對應的 ASCII碼 ;
4.形參出現在 函數定義 中,在此函數中可以使用, 離開該函數則不能使用; 實參出現在主函數中,進入其他函數后,實參變量也不能使用 , 形參和實參的功能是作數據傳送,子函數被調用時, 主調函數把實參的值拷貝給被調函數的形參;形參變量只有在被調用時才分配內存單元, 在調用結束時, 即刻釋放所分配的內存單元(由於編譯器的不同,規則可能有點不同);實參可以是常量、變量、表達式、函數等, 無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值, 以便把這些值傳送給形參;
注意:
#返回值是賦值給整個函數的,利用printf函數輸出時,和整個三目運算符,一大串運算式同理。輔助理解代碼:
#include<stdio.h>
int hanshu(int a)
{
return (a/2==5?1:0);
}
int main()
{
printf("%d\n",(10/2==5?1:0));
//將“10除以2,是否等於5,是則返回1,反之返回0”的結果以%d的形式輸出
printf("%d\n",hanshu(10));
//實參10將自己拷貝給hanshu(a)中的形參 a,再return 三目運算符的運算結果
}
運行結果:
1
1
--------------------------------
Process exited after 2.511 seconds with return value 2
請按任意鍵繼續. . .
#敲形參代碼的作用不只是將實參的數據拷貝給形參,不要忽略這里定義了一個變量來接受實參發送過來的數據,所以這時已經定義了一個變量就不要再在子函數中重復定義此變量名的變量了,輔助理解代碼(錯誤代碼):
#include<stdio.h>
void hanshu(int a)//這里已經定義變量 a 了
{
int a;//第二次....獎勵報錯
printf("%d\n",a);
}
int main()
{
hanshu(10);
}
運行結果:

#函數只要碰到return就會終止
所以此行代碼是此函數執行的最后一行代碼;
#子函數最好不要printf
在你賦予子函數更多的更多功能的同時,也限定它的一些使用范圍,而當你把每個子函數寫成更“小”時,在拼接這些函數時,也有了更多的可能性;
#主函數子函數變量不沖突
子函數和主函數的變量完全是隔絕的,就算變量名相同,它們在也在內存中占用着不同的空間
可以分別定義兩個相同名的變量,再利用printf函數查看兩個變量對應的內存單元地址來理解,如:

#子函數(形參/無)其實就是return的那個東西(理解);
#子函數的功能最好在旁邊注釋上,可能現在你寫不到100行覺得無所謂,但當參與到上萬代碼的項目時,這就是一個不太好的習慣了;
#主函數可以調用定義函數;定義函數不能調用主函數;定義函數可以調用定義函數(這里需要注意函數聲明的問題);如果你使用函數的位置是在你定義函數之前,那就需要 函數聲明 了,格式:函數名(形參/無); 函數是否需要聲明或聲明在哪里這個問題,由於編譯器的不同,答案也不同(這個東西真沒必要扣,又沒用又無聊的一個東西);
大一弟弟一枚,歡迎批評 ~ ~ (~ ̄(OO) ̄)ブ
