一、函數
1、函數
C語言程序是由函數構成的,每個函數負責完成一部分的功能,函數將功能封裝起來,以供程序調用
2、函數定義
一個函數包括函數頭函數頭和語句體兩部分,函數頭包括,函數返回值類型、函數名、參數表。
目的:將一些常用的功能封裝起來,以供日後調用
步驟:確定函數名,確定函數體,調用
格式:函數返回值類型 函數名(參數表)
{
語句體;
}
注意:函數名在程序中必須是唯一的,它也遵循標識符命名規則;參數表可以沒有也可以有多個
3、函數聲明和調用
定義函數需要明確地東西:
1、取一個有意義的函數名
2、確定函數的形參
3、編寫函數體
4、返回值
聲明和調用
為了調用一個函數,必須事先聲明該函數的返回值類型和參數類型;
當定義在調用之前時,可以不聲明函數
實例:
在main()的前面聲明瞭一個函數,函數類型是void型,函數名為a,無參數,然後在main()函數裡面調用這個函數
4、參數
a、形參:函數定義中的參數
b、實參:函數的調用者提供給函數的參數
c、形參和實參的個數必須相等
d、函數體內部不能定義和形參同名的變量
e、如果是基本的數據類型作為形參,則是純粹的值傳遞,修改函數內部形參的值並不會影響到實參的值
f、一個函數可以沒有形參,也可以有無限個形參
5、函數的返回值
Return的作業
退出函數
返回一個具體的值給函數的調用者
返回值使用注意
C語言是弱語法類型的語言,非常不嚴格
如果沒有寫清楚返回值的類型,則默認為int型的
Void代表沒有返回值
就算明確聲明瞭返回值類型,也可以不返回任何的值
C語言默認情況下,不允許有兩個同名的函數
6、函數使用注意
默認不允許函數重名
函數之間是平等的,不能夠嵌套定義
函數不可以重複定義,但是可以重複聲明,只要是在調用前聲明就可以,地方隨便
函數如果是隻要聲明沒有定義,那麼編譯可以成功,但鏈接時會失效
7、補充
main函數的返回值是返回給操作系統的,0為正常退出,其他值為非正常退出。用以進行系統日誌,其實它返回任何值對程序本身沒有影響,僅僅只是標記。
Printf函數的返回值為字符數。
二、數組
1、數組的概念
用來存儲一組數據的構造數據類型
特點:只能存放一種類型的數據
2、數組的定義和聲明
格式:類型 數組名[元素個數];
遍歷數組:
注意:
a、數組的初始化
①. Int ages[5]={17,18,19,20,21};//一般寫法
②. Int ages[5]={17,18};//只對前兩個元素賦值
③. Int ages[5]={[3]=10,[4]=11};//對指定的元素賦值,這裡為第三個和第四個
④. Int ages[]={11,12,13}.//正確,右邊的元素確定,則個數可以省略這裡為3個。
⑤. Int ages[];//錯誤,編譯器無法知道應該分配多少的存儲空間
⑥. Int ages[5];ages={17,18,19,20,21};//錯誤,只能在定義數組時這樣進行初始化
⑦. Int ages[‘A’]={1,2,3};//正確,相當於是ages[65]
⑧. Int count=5;int ages[count];//如果不進行初始化,則這種寫法正確,編譯器不會報錯為其分配20個字節的存儲空間,ages[0]=1;ages[1]=2;可以像這樣對數組的元素進行賦值,但是2,3,4等元素的值時不確定的。
⑨. 而int count=5;int ages[count]={1,2,3,4,5};//這種寫法是錯誤的,在定義數組時對數組進行初始化,元素的個數必須為常量或者不寫,不能是一個變量
b、計算數組元素
當沒有表明數組元素個數時,如何對其進行遍歷(要求使用數組元素個數)?可以使用sizeof運算符來計算數組元素的個數
Int count=sizeof(ages)/sizeof(int); //數組的總長度除以單個的長度等於元素個數
3、數組內存存儲細節
在內存中,內存從大到小進行尋址,為數組分配了存儲空間後,數組的元素自然的從上往下排列存儲,整個數組的地址為首元素的地址。
模擬該數組的內存存儲細節如下:
注意:字符在內存中是以對應ASCII值的二進制形式存儲的,而非上表的形式。
4、數組-傳址調用
Array數組與ages數組的地址一致,若以數組作為函數的參數,這種傳遞方式是傳址調用,傳遞的是整個數組的地址,修改形參數組元素的值,就是修改實參的值。
當你把一個數組當做參數來傳遞時,它會看做是一個指針,在該函數體內使用sizeof運算符來計算數組的長度,得出的數值永遠為8,而非數組的實際長度,因為任何類型的指針都佔8個字節的存儲空間。
提示:數組作為一個函數的參數時,如果函數體涉及到數組遍歷等操作,通常把數組的實際元素個數也作為參數傳遞給函數。
5、二維數組
Int ages[50];//數組能夠存放50個int類型的數據
Int ages1[3][10];//數組能夠存放3個數組,每個數組存放10個數值,共3x10=30個述職數值。
一個二維數組a,a包括兩個一維數組a[0]和a[1],每個一維數組都包括三個元素。
內存情況: