所謂,函數(shù)是指~能實(shí)現(xiàn)某些特定功能的一個(gè)方法.
為科爾沁右翼中等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及科爾沁右翼中網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、科爾沁右翼中網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
同時(shí)也是防止某些語句的重復(fù)性,以免照成程序的體積變得龐大~
//函數(shù) 有返回值,也可以沒有返回值(void 是沒有返回值的意思),有參數(shù),也可以沒參數(shù)
// 但是 必須有一個(gè)函數(shù)名和一對(duì)圓括號(hào)組成比如 void abc();//這個(gè)函數(shù)就叫做 無返回值無參數(shù)函數(shù)
比如定義 函數(shù) 取大小函數(shù)
//以下是取大小的函數(shù)的作用
int max(int a,int b);//這是取大小返回值//這個(gè)函數(shù)就代表了以下內(nèi)容
{
// 他內(nèi)部是這樣的
return a b ? b : a; //如果 a 小于 b 返回 b ,否則返回 a
}
調(diào)用函數(shù)時(shí)這樣
void main()
{
int x = 5, y = 6;
printf("輸出最大的數(shù)%d",max(x,y)); //輸出結(jié)果就會(huì)是 最大的值, max(x,y) 就是調(diào)用取大小函數(shù)
}
如果不使用函數(shù)你可能這樣寫
void main()
{
int x = 5, y = 6;
printf("輸出最大的數(shù)%d",x y ? x : y); //輸出結(jié)果也是是 最大的值, 但是你感覺那個(gè)調(diào)用更省事呢~
}
~這個(gè)取大寫函數(shù)很簡(jiǎn)單,可是有的函數(shù)可能會(huì)很龐大,調(diào)用函數(shù)就是在減少某些編碼的重復(fù)性
多看看書就了解了
1. 最好是先看看標(biāo)準(zhǔn)文檔,在cppreference.com這網(wǎng)站也能查看,打開文檔里面有各標(biāo)準(zhǔn)庫函數(shù)、宏的列表以及詳細(xì)介紹,C和C++的都有,如英文讀不懂的話可以選擇中文版。內(nèi)置的系列函數(shù),查找文檔就一目了然,還有非常詳盡的參數(shù)、功能、返回值等說明以及各種格式化說明符的用法。
2. 對(duì)于初學(xué)C語言底層實(shí)現(xiàn)并不需要深入了解,如想了解的話可以研究一下glibc之類的實(shí)現(xiàn)。
C語言庫函數(shù),常用庫函數(shù)有:
1、scanf格式輸入函數(shù)
2、printf格式輸出函數(shù)
3、systemdos命令函數(shù)
4、sort排序
5、main主函數(shù)
6、fgets文件讀取字符串函數(shù)
7、fputs文件寫入字符串函數(shù)
8、fscanf文件格式讀取函數(shù)
9、fprintf文件格式寫入函數(shù)
10、fopen打開文件函數(shù)
11、getchar輸入字符函數(shù)
12、putchar輸出字符函數(shù)
13、malloc動(dòng)態(tài)申請(qǐng)內(nèi)存函數(shù)
14、free釋放內(nèi)存函數(shù)
15、abs求絕對(duì)值數(shù)學(xué)函數(shù)
16、sqrt求平方根數(shù)學(xué)函數(shù)
擴(kuò)展資料
語言組成:
1、數(shù)據(jù)類型
C的數(shù)據(jù)類型包括:整型、字符型、實(shí)型或浮點(diǎn)型(單精度和雙精度)、枚舉類型、數(shù)組類型、結(jié)構(gòu)體類型、共用體類型、指針類型和空類型。
2、常量與變量
常量其值不可改變,符號(hào)常量名通常用大寫。
變量是以某標(biāo)識(shí)符為名字,其值可以改變的量。標(biāo)識(shí)符是以字母或下劃線開頭的一串由字母、數(shù)字或下劃線構(gòu)成的序列,請(qǐng)注意第一個(gè)字符必須為字母或下劃線,否則為不合法的變量名。變量在編譯時(shí)為其分配相應(yīng)存儲(chǔ)單元。
3、數(shù)組
如果一個(gè)變量名后面跟著一個(gè)有數(shù)字的中括號(hào),這個(gè)聲明就是數(shù)組聲明。字符串也是一種數(shù)組。它們以ASCII的NULL作為數(shù)組的結(jié)束。要特別注意的是,方括內(nèi)的索引值是從0算起的。
4、指針
如果一個(gè)變量聲明時(shí)在前面使用 * 號(hào),表明這是個(gè)指針型變量。換句話說,該變量存儲(chǔ)一個(gè)地址,而 *(此處特指單目運(yùn)算符 * ,下同。C語言中另有 雙目運(yùn)算符 *) 則是取內(nèi)容操作符,意思是取這個(gè)內(nèi)存地址里存儲(chǔ)的內(nèi)容。指針是 C 語言區(qū)別于其他同時(shí)代高級(jí)語言的主要特征之一。
參考資料來源:百度百科-函數(shù)
1.入門程序
#include stdio.h
int main()
{
printf("Hello World!");
return 0;
}
2.數(shù)據(jù)類型
數(shù)據(jù)類型:
1.基本數(shù)據(jù)類型:
1.1. 整型:int 4個(gè)字節(jié)
1.2. 字符型:char 1個(gè)字節(jié)
1.3. 實(shí)型(浮點(diǎn)型)
1.3.1.單精度型:float 4個(gè)字節(jié)
1.3.2.雙精度型:double 8個(gè)字節(jié)
2.構(gòu)造類型:
2.1.枚舉類型
2.2.數(shù)組類型
2.3.結(jié)構(gòu)體類型
2.4.共用體類型
3.指針類型:
4.空類型:
3.格式化輸出語句
%d:十進(jìn)制整數(shù);
%c:單個(gè)字符;
%s:字符串;
%f:6位小數(shù);
#include stdio.h
int main()
{
int age = 18;
float height = 1.85;
char unit = 'm';
printf("小明今年%d歲\n", age);
printf("小明身高%f%c\n", height, unit);
printf("小明現(xiàn)在在慕課網(wǎng)上學(xué)習(xí)IT技術(shù)\n");
return 0;
}
學(xué)好C++才是入職大廠的敲門磚! 當(dāng)年要是有這課,我的C++也不至于這樣
已失效
4.常量
值不發(fā)生改變的量成為常量;
定義字符常量(注意后面沒有;)
#include stdio.h
#define POCKETMONEY 10 //定義常量及常量值
int main()
{
printf("小明今天又得到%d元零花錢\n", POCKETMONEY);
return 0;
}
5.運(yùn)算符
5.1.算數(shù)運(yùn)算符:+,-,*,/,%,++,--;前++/--,先運(yùn)算,再取值.后++/--,先取值,再運(yùn)算;
5.2.賦值運(yùn)算符:
5.3.關(guān)系運(yùn)算符;
5.4.邏輯運(yùn)算符;
5.5.三目運(yùn)算符:
表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3;
6.水仙花數(shù)計(jì)算
輸出所有三位數(shù)的水仙花數(shù)字
所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù),如:153就是一個(gè)水仙花數(shù),153=111+555+333。
#include stdio.h
int main()
{
//定義三位數(shù)num,個(gè)位數(shù)sd,十位數(shù)td,百位數(shù)hd
int num, sd, td, hd;
//循環(huán)所有三位數(shù)
for( num=100 ; num1000 ; num++ )
{
//獲取三位數(shù)字num百位上的數(shù)字
hd = num/100 ;
//獲取三位數(shù)字num十位上的數(shù)字
td = num/10%10 ;
//獲取三位數(shù)字num個(gè)位上的數(shù)字
sd = num%10 ;
//水仙花數(shù)的條件是什么?
if(num ==hd*hd*hd+td*td*td+sd*sd*sd )
{
printf("水仙花數(shù)字:%d\n", num);
}
}
return 0;
}
7.打印正三角形的*
#include stdio.h
int main()
{
int i, j, k;
for(i=1; i5; i++)
{
/* 觀察每行的空格數(shù)量,補(bǔ)全循環(huán)條件 */
for( j=i ; j5 ; j++ )
{
printf(" "); //輸出空格
}
/* 觀察每行*號(hào)的數(shù)量,補(bǔ)全循環(huán)條件 */
for( k=0 ; k2*i-1 ; k++ )
{
printf("*"); //每行輸出的*號(hào)
}
printf("\n"); //每次循環(huán)換行
}
return 0;
}
8.臭名遠(yuǎn)揚(yáng)的goto語句
很少使用
#include stdio.h
int main()
{
int sum = 0;
int i;
for(i=1; i=10; i++)
{
printf("%d\n", i);
if(i==3){
goto LOOP;//滿足條件就執(zhí)行g(shù)oto語句
}
}
//執(zhí)行g(shù)oto
LOOP:printf("結(jié)束for循環(huán)了...."); //請(qǐng)選擇合適位置添加標(biāo)識(shí)符
return 0;
}
9.形參與實(shí)參
形參:形參是在定義函數(shù)名和函數(shù)體的時(shí)候使用的參數(shù),目的是用來接收調(diào)用該函數(shù)時(shí)傳入的參數(shù);
實(shí)參:實(shí)參是在調(diào)用時(shí)傳遞該函數(shù)的參數(shù)。
函數(shù)的形參和實(shí)參具有以下特點(diǎn):
形參只有在被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。
實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等,無論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值等辦法使實(shí)參獲得確定值。
在參數(shù)傳遞時(shí),實(shí)參和形參在數(shù)量上,類型上,順序上應(yīng)嚴(yán)格一致,否則會(huì)發(fā)生類型不匹配”的錯(cuò)誤。
10.函數(shù)返回值注意
注意:void函數(shù)中可以有執(zhí)行代碼塊,但是不能有返回值,另void函數(shù)中如果有return語句,該語句只能起到結(jié)束函數(shù)運(yùn)行的功能。其格式為:return;
11.遞歸
#include stdio.h
int getPeachNumber(int n) //這里要定義n,要不編譯器會(huì)報(bào)錯(cuò)!
{
int num;
if(n==10)
{
return 1;
}
else
{
num = (getPeachNumber(n+1)+1)*2;
printf("第%d天所剩桃子%d個(gè)\n", n, num);
}
return num;
}
int main()
{
int num = getPeachNumber(1);
printf("猴子第一天摘了:%d個(gè)桃子。\n", num);
return 0;
}
12.變量存儲(chǔ)類別 !
12.1.生存周期劃分存儲(chǔ)方式
C語言根據(jù)變量的生存周期來劃分,可以分為靜態(tài)存儲(chǔ)方式和動(dòng)態(tài)存儲(chǔ)方式。
靜態(tài)存儲(chǔ)方式:是指在程序運(yùn)行期間分配固定的存儲(chǔ)空間的方式。靜態(tài)存儲(chǔ)區(qū)中存放了在整個(gè)程序執(zhí)行過程中都存在的變量,如全局變量。
動(dòng)態(tài)存儲(chǔ)方式:是指在程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)空間的方式。動(dòng)態(tài)存儲(chǔ)區(qū)中存放的變量是根據(jù)程序運(yùn)行的需要而建立和釋放的,通常包括:函數(shù)形式參數(shù);自動(dòng)變量;函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)保護(hù)和返回地址等。
12.2.存儲(chǔ)類型劃分
C語言中存儲(chǔ)類別又分為四類:自動(dòng)(auto)、靜態(tài)(static)、寄存器的(register)和外部的(extern) ;
用關(guān)鍵字auto定義的變量為自動(dòng)變量,auto可以省略,auto不寫則隱含定為“自動(dòng)存儲(chǔ)類別”,屬于動(dòng)態(tài)存儲(chǔ)方式。
用static修飾的為靜態(tài)變量,如果定義在函數(shù)內(nèi)部的,稱之為靜態(tài)局部變量;如果定義在函數(shù)外部,稱之為靜態(tài)外部變量。
注意:靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)類別,在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元,在程序整個(gè)運(yùn)行期間都不釋放;靜態(tài)局部變量在編譯時(shí)賦初值,即只賦初值一次;如果在定義局部變量時(shí)不賦初值的話,則對(duì)靜態(tài)局部變量來說,編譯時(shí)自動(dòng)賦初值0(對(duì)數(shù)值型變量)或空字符(對(duì)字符變量)
為了提高效率,C語言允許將局部變量的值放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關(guān)鍵字register作聲明。
注意:只有局部自動(dòng)變量和形式參數(shù)可以作為寄存器變量;一個(gè)計(jì)算機(jī)系統(tǒng)中的寄存器數(shù)目有限,不能定義任意多個(gè)寄存器變量;局部靜態(tài)變量不能定義為寄存器變量。
用extern聲明的的變量是外部變量,外部變量的意義是某函數(shù)可以調(diào)用在該函數(shù)之后定義的變量。
#includ stdio.h
//來源公眾號(hào):C語言與CPP編程
int main()
{
//定義外部局部變量
extern int x;
return 0;
}
int x=100;
13.內(nèi)部函數(shù)外部函數(shù) !
在C語言中不能被其他源文件調(diào)用的函數(shù)稱為內(nèi)部函數(shù) ,內(nèi)部函數(shù)由static關(guān)鍵字來定義,因此又被稱為靜態(tài)函數(shù),形式為:
static [數(shù)據(jù)類型] 函數(shù)名([參數(shù)])
這里的static是對(duì)函數(shù)的作用范圍的一個(gè)限定,限定該函數(shù)只能在其所處的源文件中使用,因此在不同文件中出現(xiàn)相同的函數(shù)名稱的內(nèi)部函數(shù)是沒有問題的。
在C語言中能被其他源文件調(diào)用的函數(shù)稱為外部函數(shù) ,外部函數(shù)由extern關(guān)鍵字來定義,形式為:
extern [數(shù)據(jù)類型] 函數(shù)名([參數(shù)])
C語言規(guī)定,在沒有指定函數(shù)的作用范圍時(shí),系統(tǒng)會(huì)默認(rèn)認(rèn)為是外部函數(shù),因此當(dāng)需要定義外部函數(shù)時(shí)extern也可以省略。 extern可以省略; 14.數(shù)組 數(shù)組:一塊連續(xù)的,大小固定并且里面的數(shù)據(jù)類型一致的內(nèi)存空間, 數(shù)組的聲明:數(shù)據(jù)類型 數(shù)組名稱[長(zhǎng)度n]
數(shù)據(jù)類型 數(shù)組名稱[長(zhǎng)度n] = {元素1,元素2,元素3,......};
數(shù)據(jù)類型 數(shù)組名稱[] = {元素1,元素2,元素3,......};
數(shù)類類型 數(shù)組名稱[長(zhǎng)度n]; 數(shù)組名稱[0] = 元素1;數(shù)組名稱[1] = 元素2;...... 注意: 1、數(shù)組的下標(biāo)均以0開始; 2、數(shù)組在初始化的時(shí)候,數(shù)組內(nèi)元素的個(gè)數(shù)不能大于聲明的數(shù)組長(zhǎng)度; 3、如果采用第一種初始化方式,元素個(gè)數(shù)小于數(shù)組的長(zhǎng)度時(shí),多余的數(shù)組元素初始化為0; 4、在聲明數(shù)組后沒有進(jìn)行初始化的時(shí)候,靜態(tài)(static)和外部(extern)類型的數(shù)組元素初始化元素為0,自動(dòng)(auto)類型的數(shù)組的元素初始化值不確定。
15.數(shù)組遍歷
#include stdio.h
int main()
{
int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int i;
for(i=0;i10;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
數(shù)組的冒泡排序
冒泡排序的思想:相鄰元素兩兩比較,將較大的數(shù)字放在后面,直到將所有數(shù)字全部排序。
字符串與數(shù)組
在C語言中,是沒有辦法直接定義子字符串?dāng)?shù)據(jù)類型的,需使用數(shù)組來定義所要的字符串,形式如下:
char 字符串名稱[長(zhǎng)度] = "字符串內(nèi)容";
char 字符串名稱[長(zhǎng)度] = {'字符串1','字符串2',....,'字符串n','\0'};
注:
[]中的長(zhǎng)度可以省略不寫;
采用第二種方式最后一個(gè)元素必須是'\0',表示結(jié)束;
第二種方式不能寫中文!; 輸出字符串時(shí),要使用:printf("%s",字符數(shù)組名);或puts(字符數(shù)組名);
16.字符串函數(shù)
strlen(s):獲取字符串s的長(zhǎng)度;
strcmp(s1,s2):比較字符串;比較的時(shí)候會(huì)把字符串轉(zhuǎn)換成ASCII碼再進(jìn)行比較,返回結(jié)果為0表示s1和s2的ASCII碼值相等,返回結(jié)果為1表示s1比s2的ASCII碼大,返回結(jié)果為-1表示s1比s2的ACSII碼小;
strcpy(s1,s2):字符串拷貝;s2會(huì)取代s1中的內(nèi)容;
strcat(s1,s2)將s2拼接到s1后面;注意:s1的length要足夠才可以!
atoi(s1)將字符串轉(zhuǎn)為整數(shù)!
17.多維數(shù)組
數(shù)據(jù)類型 數(shù)組名稱[常量表達(dá)式1]...[常量表達(dá)式n];
多維數(shù)組的初始化與一維數(shù)組的初始化類似也是分兩種:
數(shù)據(jù)類型 數(shù)組名稱[常量表達(dá)式1][常量表達(dá)式2]...[常量表達(dá)式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..,值n}};
數(shù)據(jù)類型 數(shù)組名稱[常量表達(dá)式1][常量表達(dá)式2]...[常量表達(dá)式n]; 數(shù)組名稱[下標(biāo)1][下標(biāo)2]...[下標(biāo)n] = 值;
多維數(shù)組初始化要注意以下事項(xiàng):
采用第一種始化時(shí)數(shù)組聲明必須指定列的維數(shù)。因?yàn)橄到y(tǒng)會(huì)根據(jù)數(shù)組中元素的總個(gè)數(shù)來分配空間,當(dāng)知道元素總個(gè)數(shù)以及列的維數(shù)后,會(huì)直接計(jì)算出行的維數(shù);
采用第二種初始化時(shí)數(shù)組聲明必須同時(shí)指定行和列的維數(shù)。
18.多維度數(shù)組的遍歷
使用嵌套循環(huán)
注意:多維數(shù)組的每一維下標(biāo)均不能越界!
19.結(jié)構(gòu)體
C 數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許您存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng)。
結(jié)構(gòu)用于表示一條記錄,假設(shè)您想要跟蹤圖書館中書本的動(dòng)態(tài),您可能需要跟蹤每本書的下列屬性:
Title
Author
Subject
Book ID
定義結(jié)構(gòu)
為了定義結(jié)構(gòu),您必須使用 struct 語句。struct 語句定義了一個(gè)包含多個(gè)成員的新的數(shù)據(jù)類型,struct 語句的格式如下:
struct tag {
member-list
member-list
member-list ?
...
} variable-list ;
tag 是結(jié)構(gòu)體標(biāo)簽。
member-list 是標(biāo)準(zhǔn)的變量定義,比如 int i; 或者 float f,或者其他有效的變量定義。
variable-list 結(jié)構(gòu)變量,定義在結(jié)構(gòu)的末尾,最后一個(gè)分號(hào)之前,您可以指定一個(gè)或多個(gè)結(jié)構(gòu)變量。下面是聲明 Book 結(jié)構(gòu)的方式:
struct Books
{
char ?title[50];
char ?author[50];
char ?subject[100];
int ? book_id;
} book;
在一般情況下,tag、member-list、variable-list 這 3 部分至少要出現(xiàn) 2 個(gè)。以下為實(shí)例:
//此聲明聲明了擁有3個(gè)成員的結(jié)構(gòu)體,分別為整型的a,字符型的b和雙精度的c
//同時(shí)又聲明了結(jié)構(gòu)體變量s1
//這個(gè)結(jié)構(gòu)體并沒有標(biāo)明其標(biāo)簽
struct
{
int a;
char b;
double c;
} s1;
//此聲明聲明了擁有3個(gè)成員的結(jié)構(gòu)體,分別為整型的a,字符型的b和雙精度的c
//結(jié)構(gòu)體的標(biāo)簽被命名為SIMPLE,沒有聲明變量
struct SIMPLE
{
int a;
char b;
double c;
};
//用SIMPLE標(biāo)簽的結(jié)構(gòu)體,另外聲明了變量t1、t2、t3
struct SIMPLE t1, t2[20], *t3;
//也可以用typedef創(chuàng)建新類型
typedef struct
{
int a;
char b;
double c;
} Simple2;
//現(xiàn)在可以用Simple2作為類型聲明新的結(jié)構(gòu)體變量
Simple2 u1, u2[20], *u3;
訪問結(jié)構(gòu)成員
為了訪問結(jié)構(gòu)的成員,我們使用成員訪問運(yùn)算符(.)。成員訪問運(yùn)算符是結(jié)構(gòu)變量名稱和我們要訪問的結(jié)構(gòu)成員之間的一個(gè)句號(hào)。您可以使用 struct 關(guān)鍵字來定義結(jié)構(gòu)類型的變量。下面的實(shí)例演示了結(jié)構(gòu)的用法:
#include stdio.h
#include string.h
//來源公眾號(hào):C語言與CPP編程
struct Books
{
char ?title[50];
char ?author[50];
char ?subject[100];
int ? book_id;
};
int main( )
{
struct Books Book1; ? ? ? ?/* 聲明 Book1,類型為 Books */
struct Books Book2; ? ? ? ?/* 聲明 Book2,類型為 Books */
/* Book1 詳述 */
strcpy( Book1.title, "C Programming");
strcpy( Book1.author, "Nuha Ali");
strcpy( Book1.subject, "C Programming Tutorial");
Book1.book_id = 6495407;
/* Book2 詳述 */
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Zara Ali");
strcpy( Book2.subject, "Telecom Billing Tutorial");
Book2.book_id = 6495700;
/* 輸出 Book1 信息 */
printf( "Book 1 title : %s\n", Book1.title);
printf( "Book 1 author : %s\n", Book1.author);
printf( "Book 1 subject : %s\n", Book1.subject);
printf( "Book 1 book_id : %d\n", Book1.book_id);
/* 輸出 Book2 信息 */
printf( "Book 2 title : %s\n", Book2.title);
printf( "Book 2 author : %s\n", Book2.author);
printf( "Book 2 subject : %s\n", Book2.subject);
printf( "Book 2 book_id : %d\n", Book2.book_id);
return 0;
}
學(xué)好C++才是入職大廠的敲門磚! 當(dāng)年要是有這課,我的C++也不至于這樣
已失效
20.共用體
共用體是一種特殊的數(shù)據(jù)類型,允許您在相同的內(nèi)存位置存儲(chǔ)不同的數(shù)據(jù)類型。您可以定義一個(gè)帶有多成員的共用體,但是任何時(shí)候只能有一個(gè)成員帶有值。共用體提供了一種使用相同的內(nèi)存位置的有效方式。
#include stdio.h
#include string.h
union Data
{
int i;
float f;
char ?str[20];
};
int main( )
{
union Data data; ? ? ? ?
printf( "Memory size occupied by data : %d\n", sizeof(data));
return 0;
}
21.指針
#include stdio.h
int main ()
{
int ?var = 20; ? /* 實(shí)際變量的聲明 */
int ?*ip; ? ? ? ?/* 指針變量的聲明 */
ip = var; ?/* 在指針變量中存儲(chǔ) var 的地址 */
printf("Address of var variable: %p\n", var ?);
/* 在指針變量中存儲(chǔ)的地址 */
printf("Address stored in ip variable: %p\n", ip );
/* 使用指針訪問值 */
printf("Value of *ip variable: %d\n", *ip );
return 0;
}
22.文件讀寫
寫入文件
#include stdio.h
int main()
{
FILE *fp = NULL;
fp = fopen("/tmp/test.txt", "w+");
fprintf(fp, "This is testing for fprintf...\n");
fputs("This is testing for fputs...\n", fp);
fclose(fp);
}
讀取文件
#include stdio.h
int main()
{
FILE *fp = NULL;
char buff[255];
fp = fopen("/tmp/test.txt", "r");
fscanf(fp, "%s", buff);
printf("1: %s\n", buff );
fgets(buff, 255, (FILE*)fp);
printf("2: %s\n", buff );
fgets(buff, 255, (FILE*)fp);
printf("3: %s\n", buff );
fclose(fp);
}
C語言與C++學(xué)習(xí)路線
23.排序算法
十大經(jīng)典排序算法(動(dòng)態(tài)演示+代碼)
24.查找算法
九種查找算法
25.面試知識(shí)
C語言與C++面試知識(shí)總結(jié)
26.字符串操作
字符串操作的全面總結(jié)
27.?C語言常用標(biāo)準(zhǔn)庫解讀
C語言常用標(biāo)準(zhǔn)庫解讀
28. C語言最常用的貪心算法
C語言最常用的貪心算法就這么被攻克了
29. 常見的C語言內(nèi)存錯(cuò)誤及對(duì)策
常見的C語言內(nèi)存錯(cuò)誤及對(duì)策
30. C語言實(shí)現(xiàn)面向?qū)ο蟮脑?/p>
C語言實(shí)現(xiàn)面向?qū)ο蟮脑?/p>
31. C語言/C++內(nèi)存管理
看完這篇你還能不懂C語言/C++內(nèi)存管理?
32. 再談C語言指針
再談指針:大佬給你撥開 C 指針的云霧
C語言函數(shù)指針之回調(diào)函數(shù)
C語言指針詳解(文末有福利)
33. C語言預(yù)處理命令
長(zhǎng)文詳解:C語言預(yù)處理命令
34. C語言高效編程與代碼優(yōu)化
C語言高效編程與代碼優(yōu)化
35. C語言結(jié)構(gòu)體
C語言之結(jié)構(gòu)體就這樣被攻克了!值得收藏!
36. 原碼, 反碼, 補(bǔ)碼 詳解
原碼, 反碼, 補(bǔ)碼 詳解
37. C語言宏定義
簡(jiǎn)述C語言宏定義的使用
38. c語言之共用體union、枚舉、大小端模式
c語言之共用體union、枚舉、大小端模式
比如
void test( )
{
printf(“我就是無參+無返回值結(jié)合的函數(shù)!”);
}
void main ( )
{
test();
}
看上面的兩個(gè)函數(shù),一個(gè)自定義函數(shù)test,一個(gè)主函數(shù)main,在主函數(shù)main里面調(diào)用了test函數(shù),調(diào)用形式就是,直接用函數(shù)名+一對(duì)括號(hào)+分號(hào),如test();
這種最簡(jiǎn)單,很好理解,函數(shù)的功能都集中在test內(nèi)部,調(diào)用它的函數(shù)沒有給它傳遞任何值,也沒有讓它返回任何值。
還是把上面的程序,改一下
int test( )
{
printf(“我就是無參+有返回值結(jié)合的函數(shù)!,給你返回一個(gè)值”);
return 1;
}
void main ( )
{
int back_num;
back_num=test();
printf(“返回的值是%d”,back_num);
}
現(xiàn)在繼續(xù)看,因?yàn)閠est函數(shù)呢,改成了有返回值了,那原則上你需要對(duì)調(diào)用這個(gè)test函數(shù)的返回值進(jìn)行處理,比如程序中,我再定義了一個(gè)對(duì)等變量back_num用來接收人家test給你返回的值,那要是你不想再定義這個(gè)對(duì)等變量,那你必須想辦法把人家?guī)Щ貋淼闹堤幚淼?,不能不聞不問,比如,可以這樣,修改一下代碼,你去掉上面標(biāo)黃的兩句,然后,改成這樣。
printf(“返回的值是%d”, test() );
請(qǐng)問,理解了嗎?
現(xiàn)在是否懂得了這兩種函數(shù)的定義以及被調(diào)用形式?
還不懂,那就返回去繼續(xù)研究,繼續(xù)理解?
over!please back!
還是以上面程序?yàn)闇?zhǔn),參數(shù)部分你可以定義多個(gè),這里我定義一個(gè)來講解
void test( int test_num )
{
printf(“讓我看看你給我傳過來是多少!”);
printf(“收到,你傳過來是%d!,對(duì)吧,但我沒給你返回值哦!”, test_num );
}
void main ( )
{
int num=10;
printf(“讓我給他傳個(gè)值!”);
test(num) ;
}
哦,理解嗎?應(yīng)該很好理解,因?yàn)閠est設(shè)計(jì)的是需要開放一個(gè)接口參數(shù)量,所以,在()里面定義了一個(gè)變量,如果你設(shè)計(jì)的需要開放多個(gè)接口,那你就一個(gè)一個(gè)定義,用逗號(hào)(,)隔開就行,記得必須給這些量數(shù)據(jù)類型哦。別忘了。
然后呢,main函數(shù)想要調(diào)用test,test說呢,我這里需要你提供一個(gè)參數(shù)哦,你可要準(zhǔn)備好哦,main說,沒問題,我來定義一個(gè)對(duì)等量,給你傳過去,你說咋傳,test說,你就放我名字后面的()里面就行,main說,好嘞,走起!看main里面的標(biāo)黃一句。
理解了嗎?
繼續(xù)
char test( int test_num )
{
printf(“讓我看看你給我傳過來是多少!”);
printf(“收到,你傳過來是%d!,對(duì)吧,我也給你一個(gè)返回值哦!”, test_num );
return ‘Y’;
}
void main ( )
{
char sound;
int num=10;
printf(“讓我給他傳個(gè)值!然后我看看有啥反應(yīng),他能給我什么結(jié)果!總不能砸下去都沒響聲吧!”);
sound=test(num) ;
printf(“返回值是 %c ,不錯(cuò),還有個(gè)響聲!好歹有來有往!”, sound );
}
好了,到這里你能全部理解嗎?不能,那就繼續(xù)返回去再看再想吧!
補(bǔ)充。上面四個(gè)程序中,有返回值的,我沒有定義變量,直接使用的常量值給他返回去,當(dāng)然你可以根據(jù)函數(shù)功能與函數(shù)能求得的結(jié)果,通過變量來給他返回去,這都是可以的。
另外,有參數(shù)的函數(shù),在主函數(shù)main中目前都是直接通過變量的形式(當(dāng)然你也可以直接給常量,比如int num=10; test(num) ;,你可以去掉int num=10;這一句,后面的改成 test(10) ;也是可以的。這種傳遞數(shù)據(jù)的方式叫傳值調(diào)用,就是不管是變量(num)還是常量(10)其實(shí)都是具體的數(shù)據(jù),而且量也是一個(gè),不是多個(gè)。所以,相當(dāng)于一個(gè)量只能傳遞一個(gè)值,如果有多個(gè)量,那你就必須定義多個(gè)參數(shù)。調(diào)用時(shí),位置是一對(duì)一的。
大家先學(xué)習(xí)傳值,這個(gè)懂得了,再看傳遞地址怎么做!一步一步來。
我個(gè)人認(rèn)為函數(shù)這部分的重點(diǎn)給你說下哦:
1.函數(shù)的返回值類型,也就是你函數(shù)return的內(nèi)容的類型,注意如果有多種結(jié)束函數(shù)途徑的話一定要有多個(gè)return,譬如說
int fun(int x)
{
if(x0)
return 0;
else
return 1;
}
2.函數(shù)形參的傳遞關(guān)系,有的可以改變值,有的不可以改變值,也是給你個(gè)例子:
void fun1(int x,int *y,int z)
{
x=1;
*y=1;
z=1;
}
如果主函數(shù)有變量int a=b=c=2;fun(a,b,c);的話,那么b和c的值會(huì)改變,而a的值不會(huì)改變,那是因?yàn)椋?/p>
a并不對(duì)變量a所占用內(nèi)存空間的內(nèi)容進(jìn)行操作。
b是把b變量的內(nèi)存空間地址傳遞進(jìn)去了,fun函數(shù)直接對(duì)b變量所在內(nèi)存空間進(jìn)行操作,所以b會(huì)改變。
至于c,你暫時(shí)不用知道,因?yàn)樾螀nt c表示的是一個(gè)引用,是c++里面會(huì)涉及的,你現(xiàn)在用c所以暫時(shí)只要知道有這么種方法就可以了。
3.就是注意函數(shù)中變量的存活期,這個(gè)說起來有點(diǎn)麻煩,你看下書上關(guān)于局部變量和全局變量那部分的內(nèi)容吧,那個(gè)說的比較詳細(xì)。